From: Katsuyuki Komatsu Date: 1999-08-04T22:49:59+09:00 Subject: [ruby-list:15881] Re: cannot install ruby-gtk into FreeBSD 2.2.x 小松です。 In message of [ruby-list:15879] Re: cannot install ruby-gtk into FreeBSD 2.2.x on 1999/8/4 21:09:35 gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) wrote: |>忘れてましたが、これはCOMMAND.COMあるいはCMD.EXEの機能なので |>cygwinのbashでmswin32の./rubyを起動した場合のケースではUNIX |>と同様の対処が必要です。 |> |>すると、which.rbにもdosishの対策が必要かも。 | |dosish対策ってよく分からないのです…セパレータを切り替えれば |いいんでしょうか?? 勘違いしてたら教えて下さい。 PATH_SEPARATORのところはOKで「:」と「;」が切り替わりますが、 File::SEPARATORは「/」のままなので「\」も追加でチェックする 必要があります。 で、これだけじゃなくて、さらに拡張子をつけてチェックしなければ ならないです。つまり、 which.rb ruby なら、NTの場合、 ruby.exe, ruby.com, ruby.cmd, ruby.bat をチェックする必要があります (dln.cのdln_find_1()参照)。 しかも、これがOSによって微妙にちがうと。 以下の手抜きなセパレータの対策だけだと、こんな感じになります。 C:\usr\local\bin>ruby which.rb ruby # × C:\usr\local\bin>ruby which.rb ruby.exe # ○ C:\USR\LOCAL\BIN/ruby.exe C:\usr\local\bin>ruby which.rb ./ruby.exe # ○ ./ruby.exe C:\usr\local\bin>ruby which.rb .\ruby.exe # ○ .\ruby.exe C:\usr\local\bin> どこかで拡張子のリストか、検索ルーチンをエクスポートして くれないかなあ。 そういうサポートがないとすると、File::PATH_SEPARATORが「;」 なら、多少の間違いは大目にみてもらって最大公約数的な拡張子の リストを作ってそれをためすか、プラットフォームごとに拡張子の リストを用意するぐらいしかないでしょうね。 もしかすると、test(?x, prog)でこのへんうまくやってくれるのかな? そうなら、優先順位を無視すれば、たとえば、ruby.*を検索して test(?x, prog)がOKかどうかみるとかですむ可能性があります。 --- which.rb.orig Wed Aug 4 21:23:40 1999 +++ which.rb Wed Aug 4 21:32:24 1999 @@ -4,2 +4,7 @@ def which(target, all = false) + if File::PATH_SEPARATOR == ";" + addtional_separator = "\\\\" + else + addtional_separator = File::SEPARATOR + end path = ENV['PATH'].split(File::PATH_SEPARATOR) @@ -8,3 +13,3 @@ for prog in target - if (prog =~ File::SEPARATOR) + if (prog =~ File::SEPARATOR or prog =~ addtional_separator) res.push prog if test(?x, prog) && test(?f, prog) うっ、cygwinも考えなきゃいけないか。 File::PATH_SEPARATORが「:」ですが、拡張子なしのものと拡張子を つけたもの両方をみる必要があったりします。 bash-2.02$ ./ruby.exe -e 'puts File::PATH_SEPARATOR' : bash-2.02$ ./ruby -ve 'puts RUBY_INTERPRETER' ruby 1.3.6 (1999-07-28) [i586-cygwin] ./ruby bash-2.02$ ./ruby.exe -ve 'puts RUBY_INTERPRETER' ruby 1.3.6 (1999-07-28) [i586-cygwin] ./ruby.exe bash-2.02$ ln -s ruby.exe r bash-2.02$ ./r -ve 'puts RUBY_INTERPRETER' ruby 1.3.6 (1999-07-28) [i586-cygwin] ./r bash-2.02$ -- 小松克行 / Katsuyuki Komatsu