如何使用系统和反引号运行Unix命令?

时间:2013-10-01 00:40:07

标签: ruby linux unix system command-line-arguments

这有效:

system("ruby #{File.dirname(__FILE__) + '/Test')}")

但是这个

`ruby #{File.dirname(__FILE__) + '/Test'}`

不运行脚本Test

而且:

system("ruby #{File.dirname(__FILE__) + '/Test #{arg}'")

不接受arg值。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

第二个不起作用,因为有一个不平衡的尾随双引号(")和右括号())可能会引发错误,但是你没有看到它,因为反向标记忽略STDERR:

`ruby #{File.dirname(__FILE__) + '/Test'")}`

第三个不起作用,因为您试图将变量插入到用单引号括起来的固定字符串中,这也缺少终止}

system("ruby #{File.dirname(__FILE__) + '/Test #{arg}'")

如果没有在字符串插值中嵌入字符串计算,你就会看到这一点:

cmd_file = File.dirname(__FILE__) + '/Test #{arg}'
system("ruby #{ cmd_file }")

修正引文并使用内在File.join表示正确性:

cmd_file = File.join(File.dirname(__FILE__), "Test #{arg}")
system("ruby #{ cmd_file }")