正确使用 ruby exec 语法

Getting the ruby exec syntax right

我想通过ruby执行变量shell命令。我是 ruby 初学者。我让命令在没有变量的情况下工作,但是当我尝试设置变量时,exec 命令不起作用并且脚本停止 运行。 所有 3 个变量都包含字符串。

打印工作正常,但执行失败。

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

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

我需要做什么才能使 exec 正确或从系统获得更多关于如何更正此问题的提示?

jobserv 保存可执行文件的路径加上选项,options[:machines] 保存我给 jobserv 的最后一个选项标志的参数。

首先,检查您想要 exec. Several other options, like 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] 结合。如果其中任何一个本身包含完整的多参数命令调用,它看起来又会有所不同。)