2013-10-01 58 views
0

這工作:如何使用系統和反引號來運行Unix命令?

system("ruby #{File.dirname(__FILE__) + '/Test')}") 

但這

`ruby #{File.dirname(__FILE__) + '/Test'}` 

不運行腳本測試

這:

system("ruby #{File.dirname(__FILE__) + '/Test #{arg}'") 

不走ARG值。

我在做什麼錯?

+0

做什麼反引號意味着你正在使用的外殼。你沒有指出shell。 (第二行)。變量'arg'的值是什麼? – vgoff

+0

http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-60。我正試圖通過ruby文件運行unix命令。 'arg'是我將通過命令行通過的一個詞。 'system(「echo#{arg}」)'給出arg的正確值。 – Ava

+0

爲了清晰起見並減少出現錯誤的可能性,請將路徑指定給變量,然後將該變量用於字符串中的插值。不要在插值中進行計算;這是瘋狂。 –

回答

3

第二不起作用,因爲有一個不平衡的結尾雙引號(")和右括號())這可能是提高和錯誤,但你沒有看到它,因爲背蜱忽略STDERR:

`ruby #{File.dirname(__FILE__) + '/Test'")}` 

因爲你想給一個變量插值到用單引號一個固定的字符串,也缺少第三個不工作一結束}

system("ruby #{File.dirname(__FILE__) + '/Test #{arg}'") 

你會看到這個站出來,如果你沒有嵌入在您的字符串插值字符串計算:

cmd_file = File.dirname(__FILE__) + '/Test #{arg}' 
system("ruby #{ cmd_file }") 

固定的報​​價和使用內部File.join的正確性:

cmd_file = File.join(File.dirname(__FILE__), "Test #{arg}") 
system("ruby #{ cmd_file }")