小松です。
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 <komatsu / sarion.co.jp>