代替スクリプトインタプリタ(shebang)を指定するには?

代替スクリプトインタプリタ(shebang)を指定するには?

実行可能ファイル内で shebang を使用して環境を指定できます。

#!/usr/bin/env ruby

# ruby code here

しかし、できるだけ多くの環境を指定するにはどうすればよいですか?たとえば、複数のバージョンのRubyがインストールされている場合は、次のことができます。

#!/path/to/better/ruby/version
#!/path/to/alternative/ruby/version

# ruby code here

単一の実行可能ファイルに対して可能な複数の環境を指定する方法は?

答え1

短い答えはできないということです。

#!/usr/bin/env ruby単純な代わりに使用の基本的なアイデア#!/usr/bin/rubyは、ユーザーパスで最初のRubyバイナリを使用することです。さて、あなたのスクリプトは、Rubyがすべてのシステムで同じ場所にあることには依存しません。結局、「一般的な」ルビーの位置は、、、、/usr/bin/rubyなどになることができます。/usr/local/bin/ruby/opt/ruby-1.8.7/bin/ruby

いくつかの値をハードコーディングしたり、いくつかの検索ロジックを実行したい場合は、いつでもラッパーシェルスクリプトを作成できます。

#!/bin/sh

for ruby in /usr/bin/ruby /usr/local/bin/ruby
do
    if [ -x "$ruby" ]
    then
        "$ruby" myscript.rb
        break
    fi
done

動機が十分であればできます。Ruby(またはその他)スクリプトの挿入シェルスクリプトの内部。

答え2

私はmrbに反論し、あなたが代替案を行うことができると言うでしょう。いいえ「#!」行を変更してください。

#!/usr/bin/env ruby最初の行を含むRubyスクリプトがあるとします。

スクリプトを実行するには、/path/to/better/ruby/version/whateverまずPATH環境変数を設定してください/path/to/better/ruby/version

PATH=/path/to/better/ruby/version:$PATH  whatever_script_name_is

/usr/local/bin/rubyスクリプトを実行しますか? PATHを適切に設定してください。

PATH=/usr/local/bin:$PATH  whatever_script_name_is

スクリプトを実行するRuby実行可能ファイルがPATHと同じディレクトリにある場合は、PATHを操作すると他の問題が発生する可能性があります。その他代替プログラム。たとえば、BSD 、 、 、 の中に/usr/local/binがある場合、これを設定すると Linux 実行ファイルの代わりに BSD 実行ファイルが提供されます。これは問題を引き起こす可能性があります。catgrepsedrubyPATH=/usr/local/bin:$PATH

関連情報