ruby の -S オプション
ruby の -S オプションのこと調べててよくわからんことに陥ってる。
man ruby の -S に関するセクション
Makes Ruby use the PATH environment variable to search for script, unless if its name begins with a slash. This is used to emulate #! on machines that don't support it, in the following manner: #! /usr/local/bin/ruby # This line makes the next one a comment in Ruby \ exec /usr/local/bin/ruby -S $0 $*
これ、このままスクリプト作ってみても動かない。そして、なぜ突然コメントの話に?
ぼくの英語力の問題かもしれないので、日本語訳探してみた。どうやらこれなんだけど。
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2frubycmd.html
スクリプト名が`/'で始まっていない場合, 環境変数 PATHの値を使ってスクリプトを探すことを指定しま す。 これは、#!をサポートしていないマシンで、 #! による実行をエミュレートするために、以下の ようにして使うことができます: #!/bin/sh exec ruby -S -x $0 "$@" #! ruby システムは最初の行により、スクリプトを/bin/sh に渡します。/bin/shは2行目を実行しRubyインタプリタを起動します。 Rubyインタプリタは-x オプションにより`#!'で始まり, "ruby"という文字列を含む行までを 読み飛ばします。 システムによっては $0は必ずしもフルパスを含まな いので、`-S'を用いてRubyに必要に応じてスクリプトを探すように 指示する必要があります。
前半部分は man で理解したものと一致してるし、例もわかりやすくなった。
しかし shebang support してないシステムなのにスクリプトを /bin/sh に渡すとは?
そして何より日本語に訳された後になぜにここまで内容が違うのだろう??
それとも逆に日本語から英語に訳す体制になってて、man を修正し忘れてるのか。。
ruby --help で出てくるこれだけならすぐに意味がわかる。
-S look for the script using PATH environment variable
日本語訳の方にある例から察するに man ruby の例の方は要するに
sh script
して shell を明示して起動させることを期待する例なのかもしれない。
それにしても、少なくとも最近の sh では \ (バックスラッシュ) しても改行エスケープはできないらしくエラーになるけど。
たぶん、ruby --help で出てくる簡単な情報だけ知っておけばよい気がしたところで、それを自分なりの結論にしておく。