実行可能ファイルでは、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がすべてのシステムの同じ場所にあることに依存しません。結局のところ、「通常の」Rubyの場所は/usr/bin/Ruby
、/usr/local/bin/Ruby
、/opt/Ruby-1.8.7/bin/Ruby
などである可能性があります。
DIDで値をハードコーディングしたり、検索ロジックを実行したりする場合は、いつでもラッパーシェルスクリプトを作成できます。
#!/bin/sh
for Ruby in /usr/bin/Ruby /usr/local/bin/Ruby
do
if [ -x "$Ruby" ]
then
"$Ruby" myscript.rb
break
fi
done
また、十分な意欲があれば、シェルスクリプト内に Ruby(またはその他の)スクリプトを埋め込む も可能です。
私は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実行可能ファイルがother代替プログラムと同じディレクトリにある場合、PATHをいじると他の問題が発生する可能性があることに注意してください。たとえば、/usr/local/bin
にBSDcat
、grep
、sed
とRuby
が含まれている場合、PATH=/usr/local/bin:$PATH
を設定するとLinux実行可能ファイルの代わりにBSD実行可能ファイルを取得します。これにより、問題が発生する可能性があります。