2011-12-05 5 views
2

私は、次のコマンドを持っている:コマンドラインでargsを使用すると、このコマンドが失敗するのはなぜですか?

ruby SaveAllDatabases.rb 192.168.0.15 1024 -r #0-D --non-interactive 

それは私はいくつかのコマンドライン引数でRubyスクリプトを実行するにはかなり基本的なコマンドです。 -r引数は正規表現(#0-D)です。

標準のWindowsコマンドプロンプトを使用してWindows上でこのコマンドを実行すると、すべてが期待どおりに動作しますが、同じコマンドをLinux上で実行すると同じバージョンのrubyがインストールされます。

/usr/lib/ruby/1.8/optparse.rb:451:in `parse': missing argument: -r (OptionParser::MissingArgument) 
    from /usr/lib/ruby/1.8/optparse.rb:1295:in `parse_in_order' 
    from /usr/lib/ruby/1.8/optparse.rb:1254:in `catch' 
    from /usr/lib/ruby/1.8/optparse.rb:1254:in `parse_in_order' 
    from /usr/lib/ruby/1.8/optparse.rb:1248:in `order!' 
    from /usr/lib/ruby/1.8/optparse.rb:1339:in `permute!' 
    from /usr/lib/ruby/1.8/optparse.rb:1360:in `parse!' 
    from SaveAllDatabases.rb:256 

ハッシュ/ポンド(#)記号を正規表現の外に出すと、コマンドはうまく動作します。私はテストを行ったし、コマンドラインはargv配列の#の後ろに何も通らないように見える。

これはなぜ、どのようにして動作させることができますか?

答えて

6

は、あなたの投稿コードのハイライトを見てみましょう。 #とその後のすべてが灰色で表示されていることに注目してください。これは、bashでコメントを行う方法です。 #の後のすべてはコメントとみなされます。

ruby SaveAllDatabases.rb 192.168.0.15 1024 -r '#0-D' --non-interactive 

EDIT:ハイライトについてHere's a link with more information.

+0

良い点

echo "This will show on the screen" # This is a comment, it's ignored 

ソリューションは、コメントを引用することです。最もシンプルなものは非常に頻繁に見て最も難しいものです。ありがとう! –

1

引数を引用します。 #はほとんどのシェルでコメントを開始します。

$ ruby foo.rb hello there -r #wat 
hello 
there 
-r 
$ ruby foo.rb hello there -r "#wat" 
hello 
there 
-r 
#wat 
1

「#」は、特定のコマンドラインのコメントです。その後のすべては無視されます。

1

#は、シェルスクリプトと同様にコメントを開始します。

[email protected]:~$ whoami #--help 
marc 
[email protected]:~$ whoami --help 
Usage: whoami [OPTION]... 

あなたはそれをエスケープする必要があります:\#0-D

関連する問題