Ruby系统调用获取有关命令失败的信息

时间:2011-08-04 17:06:25

标签: ruby unix shell

假设我有一个简单的命令行解释器:

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

我想,而不是“命令未找到或无效”。消息得到一个实际的错误消息,就像你从bash得到的消息。我该怎么做?

1 个答案:

答案 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>

意思是,您可以挽救命令执行并返回异常消息