假设我有一个简单的命令行解释器:
while true
print '> '
cmd = gets.chomp
break if cmd =~ /^(exit|quit)/
system(cmd) || puts('Command not found or invalid.')
end
我想,而不是“命令未找到或无效”。消息得到一个实际的错误消息,就像你从bash得到的消息。我该怎么做?
答案 0 :(得分:6)
好吧,如果它是类似unix的系统,你实际上可以将2>& 1附加到你的命令中:
system(cmd + ' 2>&1 ')
将你的stderr重定向到stdout
另一种方法是使用%x [...]:
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>
意思是,您可以挽救命令执行并返回异常消息