web-dev-qa-db-ja.com

Rubyプログラムの開始時に「#!/ usr / local / bin / Ruby -w」を使用するとどうなりますか

Rubyプログラムの開始時に次のコマンドを書くことの使用は何ですか?

#!/usr/local/bin/Ruby -w

OS固有のコマンドですか? Ruby for windows?

29
simminni

Shebang行はオプションです。Rubyインタープリターを実行し、スクリプトをコマンドライン引数として渡すと、コマンドラインで設定するフラグはflags Rubyで実行されます。

Shebang行はRubyではありません(これをRubyコメントと呼びたい場合を除く)。これは実際にはシェルスクリプトです。ほとんどのLinuxおよびUNIXユーザーは実行しています。 BASHシェル(Borne Again Shellの略)ですが、ほとんどすべてのOSにはシバンを尊重するコマンドインタープリターがあります。

「#!/ usr/local/bin/Ruby -w」

「彼女」の部分は、オクトソープ(#)、別名ポンド記号、番号記号、ハッシュ記号、そして今はハッシュタグです(今でもtic-tac-toeと呼んでいます)。

「バング」の部分は感嘆符(!)であり、テーブルの上で拳を叩いてコマンドを叫ぶようなものです。

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

「-w」はフラグです。基本的には、スクリプトを実行するときにRubyに従うようにするための命令です。この場合、「-w」は警告をオンにするため、追加の警告(スクリプトは実行し続けます)またはエラー(スクリプトスクリプトの実行中に実行を停止します。プログラム中に警告と例外をキャッチして対応することができますこれらは、プログラマが予期しない動作を引き起こす問題を見つけるのに役立ちます。

私は仕事を終わらせるための迅速で汚いスクリプトのファンなので、-wはありません。私は高品質で再利用可能なコーディングのファンでもあるので、間違いなく-wを使用してください。適切な仕事に最適なツール。学習している場合は、常に-wを使用してください。何をしているのかがわかっており、クイックタスクで-wの使用をやめると、トラブルシューティングに何時間も費やすのではなく、いつ-wを使用したほうがよいかがわかります。 (ヒント、問題の原因が明確でない場合は、-wを追加して実行し、何が得られるかを確認してください)。

「-w」は、Rubyの意味を明確にするために、追加のコーディングが必要です。したがって、すぐに問題を解決することはできませんが、既に-wを使用してコードを記述している場合、警告付きで小さなスクリプトを実行するために必要なビットを追加するのに苦労します。実際、-wを使用することに慣れている場合は、おそらく既にそのようにコードを記述しているため、-wを変更しない限り、 RubyはC++のようなほとんどの(おそらくすべての)コンパイル言語よりもはるかに少ない「配管コード」を必要とするため、-wを使用しないことを選択しても、多くの入力を保存できません。スクリプト(IMHO)を実行する前に考えることを少なくします。

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

24
Able Mac

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

Windowsは同じ目的でファイルの関連付けを使用します。 Shebangラインは効果がありません(編集:FMcの回答を参照)が、害もありません。

移植可能な方法(たとえば、Cygwinおよび [〜#〜] rvm [〜#〜] の下で動作する)は次のようになります。

#!/usr/bin/env Ruby

これは、 env コマンドを使用して、Rubyインタープリターがどこにあるかを把握し、実行します。

編集:明らかに、Cygwinは/usr/bin/env Ruby -wと誤動作し、RubyではなくRuby -wを検索しようとします。 -wの効果をスクリプト自体に入れたい場合があります。

63
Koterpillar

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

Windowsマシンの例1:

#!/usr/local/bin/Ruby -w
puts $VERBOSE   # true

Windowsマシンの例2:

#!/usr/local/bin/Ruby
puts $VERBOSE   # false
8
FMc