【发布时间】:2015-12-09 03:42:34
【问题描述】:
我目前遇到了标准的 Bobby Tables 问题,但环境是 Chef + Ruby + powershell。
到目前为止,所有solutions I've seen 似乎都不合适:它们用引号将参数括起来,但不能完全转义参数。 Shellwords 和 shellescape 看起来很有希望,但它们似乎是特定于 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 构造为字符串,并“手动”转义任何参数。
任何关于如何进行的最佳实践的指针?使用system?谢谢!
编辑: 需要明确的是,上面的参数baz 可以包含任意文本,包括可能的任意字符组合。认为它与Bobby Tables 问题相同。
【问题讨论】:
-
很可能你不需要太努力。看看this article对你有没有帮助。
-
感谢您的链接,@Bill_Stewart。不幸的是,这篇文章似乎完全处理了参数中的空格,它的解决方案是用双引号将它们括起来。
-
您可以使用下载中的
showargs.exe命令行实用程序来查看 PowerShell 构造的实际命令行。
标签: ruby powershell chef-infra