2011-06-21 31 views
3

以前を実行できませんでした。私のscript consoleファイルには#!/usr/bin/env ruby19が含まれていたので、以前はエラーが発生していました。ヒットとトライアルをした後、#!/usr/bin/env ruby19#!/usr/bin/env rubyに置き換えてこのエラーを修正しました。Ruby on Railsスクリプトコンソール

上記の行は何をしますか?

バージョン:

  • ルビー:1.9.2-P180
  • Ruby on Railsの:2.3.5
+0

質問 - #/ usr/bin/env ruby​​がどのように動作するのですか? – a5his

答えて

6

#!(ハッシュバン)テキストファイルの最初の行の指示ほとんどの* nixシステムのプログラムローダーは、次に指定されたプログラム(この場合は/usr/bin/env)と任意のパラメータ(この場合はruby)を呼び出します。

/usr/bin/envは、最初の引数で指定されたプログラムの環境を見ているポータブルな方法です。ここはRubyインタプリタです。 RubyインタプリタがあなたのPATHにある場合、envはそれを見つけて残りのファイルを入力として使用して実行します。

おそらく、あなたのPATHにruby19という名前のプログラムがないので、エラーが発生します。あなたはrubyという名前のプログラムを持っているので、動作します。

1

Unixのスクリプトでシェバングラインは完全なパスを指定することになっているので、この:

#!/usr/local/bin/ruby 

は有効ですが、これではありません。

#!ruby 

最初の形式に問題がされますフルパスを使用する必要がありますが、実際のパスはすべてのシステムで同じではありません。 envユーティリティは、スクリプトがenvが常に完全なパスとして使用できるように常に/usr/bin/envにあるように、スクリプトが適切なインタプリタの環境変数PATHを検索できるようにします。envは、名前付きインタプリタを検索します。 fine manualから

env [-i] [name=value]... [utility [argument...]]

その後、修正環境とユーティリティオペランドで指定されたユーティリティを起動し、その引数に応じて変更し、現在の環境を得なければならないのenvユーティリティ。

あなたのケースではそれほど役に立ちませんが、とにかくそれを含めるべきだと思いました。 envのシバン使用は、意図された動作を使用しないビットハックです(env)。