Почему эта команда не работает, когда я использую # в аргументах командной строки? - PullRequest
2 голосов
/ 05 декабря 2011

У меня есть следующая команда:

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 ]

6 голосов
/ 05 декабря 2011

Взгляните на выделение в размещенном вами коде. Заметьте, как # и все после него серым цветом? Вот как вы делаете комментарии в 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

РЕДАКТИРОВАТЬ: Вот ссылка с дополнительной информацией.

1 голос
/ 05 декабря 2011

'#' - это комментарий к определенным командным строкам.все после этого игнорируется.

1 голос
/ 05 декабря 2011

# в командной строке запускает комментарий так же, как и в сценарии оболочки.

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

Вам придется его избежать: \#0-D

1 голос
/ 05 декабря 2011

Цитировать аргумент. # начинает комментарий в большинстве оболочек.

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