2011-08-04 45 views
2

說我有一個簡單的命令行解釋是這樣的:「未找到或無效的命令」紅寶石系統調用獲取有關命令失敗的信息

while true 
    print '> ' 
    cmd = gets.chomp 
    break if cmd =~ /^(exit|quit)/ 
    system(cmd) || puts('Command not found or invalid.') 
end 

我想,而不是消息會得到一個實際的錯誤消息,就像你從bash中得到的一樣。我將如何做到這一點?

回答

5

好,如果它是類Unix系統,你實際上可以追加2> & 1到您的命令:

system(cmd + ' 2>&1 ') 

這將重定向你的錯誤輸出到標準輸出

另一種方法是使用%×[。 ..]:

irb(main):027:0> def hello 
irb(main):029:2* %x[hello] 
irb(main):030:2> rescue Exception => e 
irb(main):031:2> puts e.message 
irb(main):033:1> end 
=> nil 
irb(main):034:0> hello 
No such file or directory - hello 
=> nil 
irb(main):035:0> 

的含義,你可以拯救命令執行並返回異常消息

+0

謝謝,這個解決方案爲我工作。 –