当我使用#in命令行参数时,为什么这个命令会失败?

时间:2011-12-05 14:23:21

标签: ruby bash command-line-arguments optionparser

我有以下命令:

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 个答案:

答案 0 :(得分: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

编辑:Here's a link with more information.

答案 1 :(得分:1)

引用参数。 #在大多数shell中开始发表评论。

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

答案 2 :(得分:1)

'#'是对某些命令行的评论。之后的一切都被忽略了。

答案 3 :(得分:1)

命令行上的

#启动注释,就像在shell脚本中一样。

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

你必须逃脱它:\#0-D