【问题标题】:Why does this command fail when I use a # in command line args?当我在命令行参数中使用 # 时,为什么此命令会失败?
【发布时间】:2011-12-05 14:23:21
【问题描述】:

我有以下命令:

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 数组中。

为什么会这样,我该如何解决?

【问题讨论】:

    标签: ruby bash command-line-arguments optionparser


    【解决方案1】:

    查看您发布的代码上的突出显示。注意# 和它后面的所有东西是灰色的吗?这就是您在 bash 中执行 cmets 的方式。 # 之后的所有内容都被视为评论。

    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.

    【讨论】:

    • 关于突出显示的要点。最简单的东西往往是最难看到的东西。谢谢!
    【解决方案2】:

    引用论点。 # 在大多数 shell 中开始注释。

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

    【讨论】:

      【解决方案3】:

      '#' 是对某些命令行的注释。之后的所有内容都将被忽略。

      【讨论】:

        【解决方案4】:

        # 在命令行开始注释,就像在 shell 脚本中一样。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-14
          • 1970-01-01
          • 2013-08-20
          • 1970-01-01
          • 2017-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多