2012-01-31 417 views
0

我正在用ruby編寫一些代碼,我想在程序啓動前測試一下命令的存在。如果該命令未安裝,我想顯示一條錯誤消息並退出程序。所以現在,我正在這樣做。用ruby退出程序

puts `type -P spark &>/dev/null && continue || { echo "You must install spark"; exit 0; } ` 

所以,一切正常,但是,在「退出0」不是的,我想不通爲什麼。 你有什麼想法解決這個問題嗎?或者更好,還有另一種方法可以做到嗎?

回答

3

您不退出腳本的原因是退出調用是在反引號內。它退出了運行spark的子shell,但這不是解釋你的ruby腳本的過程。

您可以檢查$?的內容嗎?變量,該命令在命令運行後返回Process:Status backtick命令的狀態。

但是,由於Daniel Pittman建議,使用FileTest等方法檢查可執行文件是否可用會更容易。但是,如果發生其他更復雜的故障,您可能希望將其與返回值的測試結合起來。

+0

所以,是的,但我怎樣才能用丹尼爾皮特曼的解決方案退出程序? Process.exit? – Simon 2012-01-31 19:57:51

+1

因此,如果你做Daniel的建議,因爲它全是ruby,所以你只需調用exit(-1),或者當你注意到可執行文件不可用時你想要的任何錯誤代碼。 – 2012-01-31 21:04:49

2

的更好的方法來做到這一點是:

ENV["PATH"].split(':').any? {|x| FileTest.executable? "#{x}/spark" } 

季節品嚐用於獲取的完整路徑,或使用File.join構建路徑,或平臺的路徑分隔符,或什麼的。