Cygwin使っている人いますか? その20

このエントリーをはてなブックマークに追加
942名無しさん@お腹いっぱい。:2012/02/28(火) 12:43:00.62
MSがやってるServices for UNIXがBSD4.4互換じゃなかったっけ
943名無しさん@お腹いっぱい。:2012/02/28(火) 12:58:09.33
>>942
違う。SVR4。
944名無しさん@お腹いっぱい。:2012/02/29(水) 13:29:04.14
>>918
netpbmにアップデートが入って直ったみたい
945名無しさん@お腹いっぱい。:2012/03/03(土) 03:24:12.51
[ANNOUNCEMENT] New packages: texlive-20110705-1, texlive-collection-*-20120202-1, libkpathsea{6,-devel}-20110705-1, libptexenc{1,-devel}-20110705-1, asymptote-2.15-1
http://cygwin.com/ml/cygwin/2012-03/msg00120.html


cygwin に texlive キターーーー
946名無しさん@お腹いっぱい。:2012/03/04(日) 02:33:22.35
Cygwin上でneroAacEncを使ってAACエンコードすると
ERROR: Could not create file
というエラーが出るようになっちゃったんだけど、同じ症状の人いない?
多分1.7.11にしてから発生するようになったと思うんだけど…
cmd.exe から実行するとこのエラーは出ないので、Cygwin側に何か問題があるんだろうけど全く見当がつかない

エラーが出ても一応エンコはできてるように見えるんだけど、cmd.exe から実行した場合と比較すると
ファイルサイズが違うので、多分ファイル末尾の書き出しに失敗してる気がする
他のwindowsプログラム(x264とか)ではこういう症状は起こらないんだけどなぁ
947名無しさん@お腹いっぱい。:2012/03/04(日) 13:35:42.11
>>946
あてずっぽだけど、環境変数TEMPやTMPが設定されてたら、
クリア(unset TEMP; unset TMP)したらどうかな?
948名無しさん@お腹いっぱい。:2012/03/04(日) 15:41:28.78
>>947
ビンゴでした(;´Д`)ありがとうございます!エスパーすげえ

元々 TEMP, TMP は unset してたんですが、どういうわけか小文字の環境変数 temp, tmp も設定されていたので
こいつらも unset したら neroAacEnc のエラーは出なくなりました。感謝です。
949947:2012/03/04(日) 17:27:23.82
>>948
解決して何より。

小文字のtemp,tmpについて気になったので、いま、cygwin-announce ML を「temp」で検索したら、base-files-4.0-7 でtemp/tmpを定義するようになった見たい。
http://sourceware.org/ml/cygwin-announce/2012-02/msg00021.html
http://cygwin.com/ml/cygwin/2012-01/msg00201.html

手元の base-files 4.0-9 でも temp/tmp が定義されてた。
$ cygcheck -cd base-files
Cygwin Package Information
Package Version
base-files 4.0-9

$ cygcheck -l base-files | grep ^/etc | xargs grep -l temp
/etc/defaults/etc/profile
grep: /etc/postinstall/base-files-profile.sh: No such file or directory
grep: /etc/postinstall/base-files-mketc.sh: No such file or directory

$ egrep '(tmp|temp)=' /etc/defaults/etc/profile
tmp=$(cygpath -w "$ORIGINAL_TMP" 2> /dev/null)
temp=$(cygpath -w "$ORIGINAL_TEMP" 2> /dev/null)
950名無しさん@お腹いっぱい。:2012/03/04(日) 21:03:44.67
>>949
temp, tmp はWindowsネイティブプログラムが正しく動くようにするために導入されたってことですかね。確かに言いたいことはわかる
ただこれ、うちのデフォルトでは temp=/cygdrive/c/DOCUME~1/hoge/LOCALS~1/Temp みたいに定義されちゃってるんですよね
これを temp=C:\Documents and Settings\hoge\Local Settings\Temp のように修正するのが正しい解決法ってことなのかな
一応そのように修正すれば neroAacEnc のエラーは出ないようなので、これでいこうと思います
951名無しさん@お腹いっぱい。:2012/03/05(月) 10:15:57.60
なんかそれ意図した動作になってないんじゃね?(つまりcygwin側のバグ)
ネイティブアプリには小文字の方を見てほしいのかもしれないけど
実際には大文字のほうを見てるぞ
少なくとも、GetTempPath(), _tempnam()に関してはそういう動作になる
つーかWindowsがデフォで持ってる環境変数も大文字だし……

ネイティブアプリを起動する際に
tmp/temp/TMP/TEMPはWindowsネイティブパス形式には変換されるみたいだ
ただし値の再設定はしていないので、
TMP/TEMPはC:\cygwin\tmpのようになる(/tmpをネイティブに変換した結果)
cmd.exeをbashから起動して
C:\> set
とかやってみるとわかる
952名無しさん@お腹いっぱい。:2012/03/05(月) 13:46:40.30
>>951
/etc/profile では大文字の TMP, TEMP は unset してるみたいだよ
で、大文字の TMP が存在せず小文字の tmp が存在する場合、GetTempPath(), _tempnam() は小文字の tmp を見てくれるみたい
検証用コード: http://codepad.org/ZHYXRqIy

tmp=C:\Documents and Settings\hoge\Local Settings\Temp の場合
 GetTempPath(): C:\Documents and Settings\hoge\Local Settings\Temp\
 _tempnam(): C:\Documents and Settings\hoge\Local Settings\Temp\foo2
unset tmp した場合
 GetTempPath(): C:\Documents and Settings\hoge\
 _tempnam(): \foo2
後者は明らかに意図した結果ではない

つまり、Cygwinプログラムは TMP, TEMP が定義されてなくてもデフォで /tmp を使うはずだから特に問題にならないが、
Windowsネイティブプログラムは TMP, TEMP (大文字小文字問わず)が定義されてないとテンポラリパスが思わぬ値になるから
小文字の tmp, temp のみを定義することで両方ともうまく動くようにした、と解釈したんだけどどうだろう
953名無しさん@お腹いっぱい。:2012/03/05(月) 18:21:09.30
>>952
いやちょっと意味が分からない
unsetしたあとでTMP,TEMPを/tmpなんかにセットしてるから
結局/tmpが残るんじゃないの?

ORIGINAL_TMP=$TMP
ORIGINAL_TEMP=$TEMP
unset TMP TEMP
tmp=$(cygpath -w "$ORIGINAL_TMP" 2> /dev/null)
temp=$(cygpath -w "$ORIGINAL_TEMP" 2> /dev/null)
TMP="/tmp"
TEMP="/tmp"

そもそもTMPやTEMPを誰のために弄ってるんだろう
cygwin側のプログラムは必要としない筈なのに
954953:2012/03/05(月) 18:26:05.14
もう少し補足すると、
bash --login
の状態で、TMPとTEMPの値は/tmpになっていて、
bashからcmd.exeを起動すると、
TMPとTEMPが(cygwin_conv_to_win32_pathの変換に従って)C:/cygwin/tmp
に変換されているのが分かる
Win32ネイティブアプリが見るのはこの値
955名無しさん@お腹いっぱい。:2012/03/05(月) 18:50:09.26
>>953
あー、/etc/profile は TMP, TEMP を消してるのかと思ったら /tmp に再設定してるのか
うちではシェルの初期化ファイルで TMP, TEMP を消してたから気付かなかった

それだと確かに意味わからんねえ
TMP, TEMP を消して tmp, temp をWindowsのテンポラリに設定するなら筋が通るんだけど
956947:2012/03/05(月) 21:33:02.63
base-files 3.9-3 で作られた ~/.bashrc だと「大文字の TEMP と TMP」は定義されなかった
$ set | egrep -i 'TMP|TEMP'
ORIGINAL_TEMP=/cygdrive/e/TEMP_C~1
ORIGINAL_TMP=/cygdrive/e/TEMP_C~1
temp='E:\TEMP_C~1'
tmp='E:\TEMP_C~1'

base-files 4.0-9 の /etc/defaults/etc/skel/.bashrc を ~/.bashrc にコピーしたときは「大文字の TEMP と TMP」は定義されてた。

$ mv ~/.bashrc ~/old.bashrc
$ cp /etc/defaults/etc/skel/.bashrc ~/
$ set | egrep -i 'TMP|TEMP'
ORIGINAL_TEMP=/cygdrive/e/TEMP_C~1
ORIGINAL_TMP=/cygdrive/e/TEMP_C~1
TEMP=/tmp
TMP=/tmp
temp='E:\TEMP_C~1'
tmp='E:\TEMP_C~1'
957名無しさん@お腹いっぱい。:2012/03/08(木) 10:48:35.62
10年ぶりにCygwin入れたのだけれど、
bashのメッセージがディフォルトで日本語のようなのだkが、
それは問題なのだが、pingコマンドを実行すると、
192.168.0.38 ????????: ?o?C?g?? =32 ???? <1ms TTL=128
みたいに化けるのはなぜ?
958名無しさん@お腹いっぱい。:2012/03/08(木) 11:47:19.15
minttyの仕様です
959名無しさん@お腹いっぱい。:2012/03/08(木) 12:01:18.00
化けないようにする方法を教えてくえ
960名無しさん@お腹いっぱい。:2012/03/08(木) 12:55:56.43
Windowsネイティブのコンソールウィンドウ(「コマンドプロンプト」と同じやつ)に
不満が無いのなら、それを使うのが一番単純な解
つまり端末ソフトを使用せず、bash.exeなり何なりを直接起動して使う

そうでない場合は、エンコーディングが混在しても適当によろしくやってくれる
端末ソフト(たとえばck)を使うしかない
ただし、この場合は端末ソフトが受け取った文字列を見てエンコーディングを推測して
変換することになるので、もちろん誤爆はありえる
961名無しさん@お腹いっぱい。:2012/03/08(木) 14:18:53.05
>960
サンキュウ。でも、
10年ぶりなので浦島太郎状態だ。
cygwinの純正コンソールで、pingが文字化けするってどいうことよ。
文字化けが起こるなんて、時代に逆行しているだろ。
とにかく、前途有望やつ、ものすごくスマートに解決してくれよ。
962名無しさん@お腹いっぱい。:2012/03/08(木) 15:09:15.82
>>961
それCygwinのpingじゃないんじゃない?
963名無しさん@お腹いっぱい。:2012/03/08(木) 15:23:28.70
>>961
Cygwinのバグだな。
ロケールがUTF-8なのにcode pageをUTF-8にするのを忘れてるんだろう。
だからpingはShift JISを吐く、CygwinはUTF-8と思って解釈するから化ける。
そんなところだろうな。めんどくさいから誰か直して。
964名無しさん@お腹いっぱい。:2012/03/08(木) 15:27:54.90
家のはbashもminttyも文字化けしない。
965名無しさん@お腹いっぱい。:2012/03/08(木) 15:49:18.55
>>960が言うように誤爆が嫌だから推測しない方針なんだろ
あとコードページを65001にしてもCP932がUTF-8に変換されるわけではないと思うが
966名無しさん@お腹いっぱい。:2012/03/08(木) 15:55:33.97
>ロケールがUTF-8なのにcode pageをUTF-8にするのを忘れてるんだろう。

だったら、

ping 192.168.0.38 | nkf -w

とかして、pingのSJIS出力をUTF8に変換するなどのヘンテコな方法でも
いいので、とにかく文字化けを回避する方法ないかな。
nkfが入っていないので試せない。うまく行くとも思えないが。
967名無しさん@お腹いっぱい。:2012/03/08(木) 16:01:10.47
いや普通にそれでいいだろ
なぜうまく行かないと思ったのか
968名無しさん@お腹いっぱい。:2012/03/08(木) 16:02:23.56
>967
10年ぶりだからさ。
969名無しさん@お腹いっぱい。:2012/03/08(木) 18:44:31.64
なんでWindowsのping使うんだ?Cygwinのパッケージにあるものを使えば全く問題ない
970名無しさん@お腹いっぱい。:2012/03/08(木) 19:15:35.14
なんでだか忘れたけど cygwin 版の ping をアンインスコして windows の ping に戻った記憶があるんだよな。
なんでだったっけかね・・・
971名無しさん@お腹いっぱい。:2012/03/08(木) 19:46:32.46
>>969
どっちみちWindowsネイティブのもので使いたいコマンドはあるはずなので
(icaclstとかnetとかtasklistとかrobocopyとか)
pingだけそういう方法で解決してもあまり意味がない気がするんだ
972名無しさん@お腹いっぱい。:2012/03/08(木) 19:47:16.78
typoった
× icaclst
○ icacls
973名無しさん@お腹いっぱい。:2012/03/08(木) 19:54:24.49
>>966
> nkfが入っていないので試せない。うまく行くとも思えないが。

コマンド 2>&1 | iconv -f cp932 -t utf-8

でいいんじゃないか?
974名無しさん@お腹いっぱい。:2012/03/08(木) 19:58:48.52
10年前と同じようにc:\cygwin\cygwin.bat起動して
コンソール窓で使っとけよ鬱陶しい
975名無しさん@お腹いっぱい。:2012/03/08(木) 20:08:57.44
cocot使いなよ
976名無しさん@お腹いっぱい。:2012/03/08(木) 20:11:57.02
>>971
ネイティブアプリはネイティブなコンソール使えばいいだけだろ、
CygwinコンソールにCygwinアプリ以外のものまでケツ拭かせるのが
当然みたいな発想がそもそも理解できん(それはシームレスとは違う)。

> cygwinの純正コンソールで、pingが文字化けするってどいうことよ。
おまえに死ねって言ってるんじゃねーかな。
977名無しさん@お腹いっぱい。:2012/03/08(木) 21:09:09.51
# ping www.google.com | iconv -f CP932 -t UTF-8

www.l.google.com [74.125.235.114]に ping を送信しています 32 バイトのデータ:
74.125.235.114 からの応答: バイト数 =32 時間 =16ms TTL=50
74.125.235.114 からの応答: バイト数 =32 時間 =16ms TTL=50
74.125.235.114 からの応答: バイト数 =32 時間 =16ms TTL=50
74.125.235.114 からの応答: バイト数 =32 時間 =16ms TTL=50

74.125.235.114 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 16ms、最大 = 16ms、平均 = 16ms

わーい
978名無しさん@お腹いっぱい。:2012/03/08(木) 21:12:34.61
ping とかはどうでもいいんだけど java と javac は結構めんどくさかったわ。
979名無しさん@お腹いっぱい。:2012/03/08(木) 21:19:21.79
>>976
自分も同意見だが、cmdでCygwinのプログラムを動かすと日本語化けないんだよね
cmdにもできることがminttyにはできんのかって話なら、そう言いたくなる気持ちは分かる
980名無しさん@お腹いっぱい。:2012/03/08(木) 21:21:38.70
つまり ck 最強
981名無しさん@お腹いっぱい。:2012/03/08(木) 21:38:12.94
>>979
minttyの左上オプションから、ロケールをShift_JISにしたら
文字化けしなくなったんだけど
982名無しさん@お腹いっぱい。:2012/03/08(木) 21:47:23.39
そりゃLANG(LC_CTYPE)をSJISにすれば文字化けは回避できるけど
せっかくUTF-8ロケールなら完璧に扱えるUnicodeパスの扱いなどに問題が出るし
やめたほうがいいと思うよ
983名無しさん@お腹いっぱい。:2012/03/08(木) 22:02:42.76
Pythonかなんかでwrapper書いて/usr/local/binにでも入れとけばよくね?
984名無しさん@お腹いっぱい。:2012/03/09(金) 10:08:04.32
FDcloneをUTF-8に完全対応してくれる人はいませんか?
985名無しさん@お腹いっぱい。:2012/03/09(金) 10:14:33.21
いませんよ。
986 【東電 83.8 %】 :2012/03/09(金) 11:08:30.09
     ,-∧,,∧-- 、
   / (´・ω・`) /
   r-くっ⌒cソ、 /  こうしている今
  ノ '、 , 、 _, ' / /   布団のなかでおしっこしてるのは内緒
.(_,.       ././     
,(.,_ `'ー-、_,,..ノ/
  ~`''ー--‐'
987名無しさん@お腹いっぱい。:2012/03/09(金) 13:39:53.84
そうか、オイラが使っていたpingはWindows7の奴だったのか!iconv作戦で文字化けは
解消した。
そのあと、cygwinのpingをインストールしたら、
ping: socket: Operation not permitted
って出た。管理者じゃなくてもpingくらいさせてくれよ。
988名無しさん@お腹いっぱい。:2012/03/09(金) 20:16:54.53
リアルタイム文字コード自動判別 する ck terminal emulator を使うのはどうだ?
http://sohda.net/cygwin/dist/mirror/www.geocities.jp/meir/cygwin_ck/Index.html
自分は最近minttyとCygTerm (TeraTerm) で、文字化けは黙殺しているから ck は使ってないけど。
989988:2012/03/09(金) 20:18:50.38
あ、ck は >>960 が紹介してたね。重複すまん。
990名無しさん@お腹いっぱい。:2012/03/09(金) 20:28:03.22
>>987
cygwin って, ユーザを適当なグループに入れといて
chmod g+x とかできないんだっけ?
991名無しさん@お腹いっぱい。
>>984
対応しているが