运行shell脚本时缺少Ruby-Double引号

时间:2014-07-16 21:21:22

标签: ruby json shell

我从我发出的一些数据中创建了一些json,当我将存储在变量中的json传递给另一个脚本(在python中创建)时,我注意到json元素不再是双引号

json = @report.resultReportToJSON(result_type, result, unit)
puts "#{json}"
`"python ./post_request.py  --json '#{json}'"`

我的输出是这样的。从看来是:

{"test_name":"Launch","requester":"foo","device_serial":"1234"}

和执行的命令(我们有一些输出命令的日志记录)是

post_request.py --relative_path '/api/benchmark/' --json '{test_name:Launch,requester:foo,device_serial:1234}'

您可以注意到双引号已经消失

2 个答案:

答案 0 :(得分:1)

使用system

,而不是反引号
system "python", "./post_request.py", "--json", json

由于反引号命令由/ bin / sh执行,因此双引号会被shell吞噬。使用system可以让您免于使用引号来猜测游戏:

$ irb
irb(main):001:0> json = '{"test_name":"Launch","requester":"foo","device_serial":"1234"}'
=> "{\"test_name\":\"Launch\",\"requester\":\"foo\",\"device_serial\":\"1234\"}"
irb(main):002:0> puts `echo #{json}`
test_name:Launch requester:foo device_serial:1234
=> nil
irb(main):003:0> puts `echo "#{json}"`
{test_name:Launch,requester:foo,device_serial:1234}
=> nil
irb(main):004:0> puts `echo '#{json}'`
{"test_name":"Launch","requester":"foo","device_serial":"1234"}
=> nil
irb(main):005:0> system "echo", json
{"test_name":"Launch","requester":"foo","device_serial":"1234"}
=> true

答案 1 :(得分:0)

试试这个:

require 'json'
`"python ./post_request.py  --json '#{json.to_json}'"`

这可能有助于确保在转换为系统命令时使用转义引号序列化对象。