簡體   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