実行可能ファイル内で 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 実行ファイルが提供されます。これは問題を引き起こす可能性があります。cat
grep
sed
ruby
PATH=/usr/local/bin:$PATH