正确使用 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)
(取决于是否希望 jobserv
和 options[:machines]
结合。如果其中任何一个本身包含完整的多参数命令调用,它看起来又会有所不同。)
我想通过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)
(取决于是否希望 jobserv
和 options[:machines]
结合。如果其中任何一个本身包含完整的多参数命令调用,它看起来又会有所不同。)