2

私は次のコマンドを持っています:

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配列の#の後に何も渡していないようです。

これはなぜですか、どうすれば回避できますか?

4

4 に答える 4

6

投稿されたコードの強調表示を見てください。# とそれ以降のすべてが灰色になっていることに注意してください。これは、bash でコメントを行う方法です。# の後のすべてがコメントと見なされます。

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

解決策は、コメントを引用することです:

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

編集:詳細情報へのリンクを次に示します。

于 2011-12-05T14:27:27.720 に答える
1

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

$ ruby foo.rb hello there -r #wat
hello
there
-r
$ ruby foo.rb hello there -r "#wat"
hello
there
-r
#wat
于 2011-12-05T14:26:54.153 に答える
1

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

于 2011-12-05T14:27:12.777 に答える
1

#コマンド ラインで、シェル スクリプトの場合と同様に、コメントを開始します。

marc@panic:~$ whoami #--help
marc
marc@panic:~$ whoami --help
Usage: whoami [OPTION]...

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

于 2011-12-05T14:27:20.280 に答える