正确设置ruby exec语法

时间:2018-08-15 13:04:06

标签: ruby exec

我想通过ruby执行可变的shell命令。我是红宝石初学者。我的命令没有变量,但是当我尝试设置变量时,exec命令不起作用,脚本停止运行。 所有3个变量都包含字符串。

打印正常,但执行不正常。

print "#{jobserv}" + options[:machines] + " -c touch #{noautooffPath} \n"

exec('"#{jobserv}" + options[:machines] + " -c touch #{noautooffPath}"')   

我该怎么做才能使执行权正确或使系统获得更多有关如何纠正此错误的提示?

jobserv包含可执行文件的路径以及选项,options [:machines]包含我提供给jobserv的最后一个选项标志的参数。

1 个答案:

答案 0 :(得分:3)

首先,检查您要exec。其他几个选项,例如system,是运行shell命令的更常见选择。 (具体来说,如果exec成功,则Ruby脚本将停止执行并由其执行的命令替换 ;该脚本的其余部分将永远不会运行。)

您似乎在exec调用中多了一层单引号。您可能想要更接近此的东西:

exec("#{jobserv}" + options[:machines] + " -c touch #{noautooffPath}")

(假设print显示您想要的值)


通常,避免单字符串shell形式并单独传递所有参数是更安全的。看起来可能更像这样:

exec("#{jobserv}#{options[:machines]}", "-c", "touch", noautooffPath)

或:

exec(jobserv, options[:machines], "-c", "touch", noautooffPath)

(取决于是否期望jobservoptions[:machines]合并。如果期望其中任何一个包含完整的多参数命令调用,它将再次看起来不同。)