2017-09-25 144 views
1

我需要兩個字符特價推出內部有特殊字符

system "my command "#{$value command here}" other ARGS here" 

系統命令的Ruby系統命令我不能直接使用

system "my command #{$value command here} other ARGS here" 

我需要在開始時插入"字符和我的價值命令的結束。我可以使用系統來做到這一點?

回答

6

無論何時您編寫系統命令,您都必須執行中的一項。或者使用shellescape,以確保外殼正確分析它們逃避值:

require 'shellwords' 
system "my command #{"$value command here".shellescape} other ARGS here" 

或者你可以單獨拆分出來的參數,以便外殼不需要解釋它們:

system("my", "command", "$value command here", "other", "ARGS", "here") 

第二形式通常更好,一切都更加明確,並且你沒有機會忘記逃避某些事情。

請記住,運行包含用戶數據的shell命令會使您面臨嚴重風險。你絕對必須提前逃避任何事情以避免出現shell級別的漏洞。最重要的是,記住文件名可以並且將包含空格,特別是從Windows上傳的文件,其中Untitled (1).rtf是一個非常常見的名稱。

+2

謝謝你的「第二種形式通常更好」的一部分。 「系統」的單一參數形式(以及反作用)造成了許多問題。 –

+0

我真的很喜歡ruby語法,我最終使用你的第一個代碼'require'shellwords' system「我的命令#{」$ value command here「.shellescape}其他ARGS在這裏」' –

+1

@flowdaguerre正如我們已經指出的那樣,你真的,真的,真的,真的,*真的*想要使用第二種形式。我不是在開玩笑。微小的錯誤會讓你付出巨大的代價。當你遇到安全問題時,你所選擇的只是那麼重要。 – tadman