2013-07-03 11 views

答えて

12

シェバング行はオプションで、あなたはRubyインタプリタを実行した場合にスクリプトを渡しますコマンドライン引数として指定すると、コマンドラインで設定したフラグは、rubyが実行するフラグになります。

シバンラインはルビーではありません(ルビーコメントと呼ぶ場合を除きます)。それは本当にシェルスクリプトです。ほとんどのlinuxとunixユーザはBASHシェル(Borne Again SHellの略)を実行していますが、ほとんどすべてのOSにShebangを敬うコマンドインタープリタがあります。

「#!は/ usr/local/binに/ルビー-w」

"彼女は" の部分がシャープ記号、番号記号、ハッシュマーク、そして今ハッシュタグ別名octothorp(#)であり、(Iまだそれをチック - タック - トゥだけと呼ぶ)。

"bang"部分は叫び記号(!)で、コマンドを叫ぶためにあなたの拳をテーブルに叩くようなものです。

Windowsでは、「シェル」はコマンドプロンプトですが、黒のDOSウィンドウがなくても、コマンドインタープリタはファイルの関連付けに基づいてスクリプトを実行します。コマンドインタープリタやプログラミングラングがシバンを読んでフラグが守られているかどうかは重要ではありません。重要なポイントは、彼らが尊敬されることです。

"-w"はフラグです。基本的には、スクリプトを実行するときにルビーが従うように指示します。この場合、 "-w"を指定すると警告が表示されるので、スクリプトの実行中に余分な警告(スクリプトの実行の継続)やエラー(スクリプトの実行の停止)が発生します。プログラム中に警告や例外を捕らえることができます。これらは、予期しない動作につながる問題をプログラマーが見つけるのに役立ちます。

私は仕事をやるためにすばやく汚いスクリプトのファンです。私はまた、高品質の再利用可能なコーディングのファンですので、間違いなく-wを使用してください。適切な仕事のための適切なツール。あなたが学んでいるなら、常に-wを使います。あなたが何をしているのかを知り、早いタスクで-wを使うのを止めたら、トラブルシューティングの時間を費やす代わりに、-wを使うのにいつ助けになったのかを理解し始めるでしょう。 (ヒント、問題の原因がはっきりしていない場合は、-wを付けて実行して、何を得るかを確認してください)。

"-w"は、あなたが意味するものを明確にするためにいくつかの特別なコーディングが必要なので、すぐには解決できませんが、すでに-wでコードを書いていれば、小さなスクリプトを警告で実行させるのに必要なビット。実際、-wを使用することに慣れているなら、おそらくすでにコードを書いているでしょうし、何かを忘れていない限り、-wは何も変更しません。 RubyはC++のようなコンパイルされた言語のほうがはるかに少ない "plumbing code"しか必要としないので、-wを使わないと、たくさんの入力を省くことはできません。 )。

-vは冗長モードであり、スクリプトの実行は変更されません(警告は発生せず、新しい場所でスクリプトを停止することはありません)。いくつかのサイトとディスカッションでは、-w詳細モードが呼び出されますが、-wは警告モードであり、スクリプトの実行が変更されます。

+0

'-w'フラグの詳細な説明をありがとう! – lacostenycoder

48

Shebangと呼ばれます。これは、プログラムローダーにファイルの実行に使用するコマンドを伝えます。したがって、./myscript.rbを実行すると、実際には/usr/local/bin/ruby -w ./myscript.rbに変換されます。

Windowsは同じ目的でファイルの関連付けを使用します。シバン行は効果がありません(編集:FMcの答えを見てください)が、害はありません。 (Cygwinの下たとえば、作業、およびRVM

ポータブルな方法は次のようになります。これは、Rubyインタプリタがどこにあるかを把握するenvコマンドを使用して、それを実行します

#!/usr/bin/env ruby 

編集:明らかに、正確にはCygwinは/usr/bin/env ruby -wと振る舞い、rubyの代わりにruby -wを検索しようとします。 -wの効果をスクリプト自体に入れたいと思うかもしれません。

+0

私は、-wは冗長モードを有効にすること、または単にエラー報告を有効にすることを意味します。 #!/ usr/local/bin/ruby​​ -wはウィンドウに意味を持たないので、ファイルの関連付けのために、プログラムの先頭に文を追加する必要がありますか? – simminni

+0

Windowsの場合、 '.rb'ファイルとRuby実行ファイルを関連付けるだけです。 – Koterpillar

+0

私の疑いを明確にしてくれてありがとう。 – simminni

8

シバン行の実行動作はWindowsの世界に直接変換されませんが、その行に含まれているフラグ(たとえば、質問の-w)は実行中のRubyスクリプトに影響します。

Windowsマシン上の例1:Windowsマシン上の

​​

例2:

+2

ここに尋ねるのが関係するのかどうかわかりませんが、VERBOSEグローバル変数の役割は何ですか? – simminni

+1

@simminni 'ruby -h'を実行すると、基本的な(しかしそれほど役に立ちません)答えが得られます:' -w'フラグは "あなたのスクリプトの警告をオンにする"でしょう。より多くの文脈のためのこのポストを見なさい:http://mislav.uniqpath.com/2011/06/ruby-verbose-mode。私のアドバイス:あなたのスクリプトが特定の値を持つ '$ VERBOSE'に依存している場合、それをスクリプトに明示的に設定します(シバンラインフラグに頼らないでください)。 – FMc

関連する問題