我正在使用ruby执行系统命令。代码就像这样
commandtoexecute=“pararellrspec --type rspec -n 1 --test-options '--test "cases's owner"' testing/multi/getcreate.rb “
system(commandtoexecute)
执行上述行时会出现错误
sh: -c: line 0: unexpected EOF while looking for matching `"'
sh: -c: line 1: syntax error: unexpected end of file
但是,当我通过用上面的casess替换案例来执行时,它起作用。有没有人知道如何防止上述错误而不用“casess”替换“cases's”
答案 0 :(得分:1)
你需要逃避双引号:
"pararellrspec --type rspec -n 1 --test-options '--test \"cases's owner\"' testing/multi/getcreate.rb"
编辑:也许那行单引号,想一想:
"pararellrspec --type rspec -n 1 --test-options '--test \"cases\'s owner\"' testing/multi/getcreate.rb"
或者如果按预期工作,可能会删除单引号而不是:
"pararellrspec --type rspec -n 1 --test-options --test \"cases's owner\" testing/multi/getcreate.rb"
或者(并且更好),在适当的时候使用system
的数组风格,以便让Ruby为您处理引用参数:
system("echo *")
system("echo", "*")
http://www.ruby-doc.org/core-2.1.1/Kernel.html#method-i-system
答案 1 :(得分:0)
commandtoexecute="pararellrspec --type rspec -n 1 --test-options '--test "cases's owner"' testing/multi/getcreate.rb"
system(commandtoexecute)
你可以看到你有一个逃避问题"和'在你的命令字符串中。要绕过这个问题,你可以使用
%x(ruby --copyright)
> "ruby - Copyright (C) 1993-2013 Yukihiro Matsumoto\n"
在ruby中执行shell命令。这种速记方法可以处理任何必要的转义。所以你的原始代码归结为:
%x(pararellrspec --type rspec -n 1 --test-options '--test "cases's owner"' testing/multi/getcreate.rb)
正如您所看到的,因为您不需要"
来创建一个包含您的命令的字符串(正如您在commandtoexecute
上面所做的那样),转义问题就消失了。
答案 2 :(得分:0)
不确定请尝试这样: -
1.9.3p448 :025 > commandtoexecute="pararellrspec --type rspec -n 1 --test-options '--test 'cases\'s owner' testing/multi/getcreate.rb"
=> "pararellrspec --type rspec -n 1 --test-options '--test 'cases's owner' testing/multi/getcreate.rb"
1.9.3p448 :026 > system(commandtoexecute)
这样可以试试。
请click了解更多详情。