繁体   English   中英

从Ruby / Chef调用时如何转义powershell命令参数?

[英]How to escape powershell command arguments when calling from Ruby/Chef?

我目前遇到的是沼泽标准的Bobby Tables问题,但是环境是Chef + Ruby + powershell。

到目前为止, 我所看到的所有解决方案似乎都不足够:它们用引号将引号引起来,但是并不能完全避免引数。 Shellwordshellescape看起来很有前途,但它们似乎是bash特定的。

例如,我可能想在Chef中构造以下Windows Shell命令:

.\foo.exe BAR="#{node['baz']}"

从SQL开发人员世界进行概括,我很天真地期望这样的接口:

cmd = "foo.exe BAR=?"
args = (node['baz'])
run-command(cmd, args)

在哪里run-command将处理转义任何参数。 取而代之的是,我看到的接口让我想起了旧的SQL时代,当时开发人员不得不将SQL构造为字符串,并“手动”转义任何参数。

关于如何进行最佳实践的任何指示? 使用系统 谢谢!

编辑:很清楚,上面的参数baz可以包含任意文本,包括任何字符的组合。 认为它与Bobby Tables问题相同。

最简单的通用解决方案是将数组形式用于execute资源的command属性。 这样可以避免所有shell逐字逐句地运行命令。

execute 'whatever' do
  command ['foo.exe', "BAR=#{node['baz']}"]
end

但是,这对于script样式资源不起作用, script样式资源需要一个字符串来运行脚本块,包括powershell_script 在那里,您需要一些更适合PowerShell的东西,而我对它的规则还不够了解,无法说出Shellwords是否可以匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM