gpt4 book ai didi

ruby - 在 Ruby 中拯救 bash/系统 STDERR

转载 作者:数据小太阳 更新时间:2023-10-29 08:27:50 26 4
gpt4 key购买 nike

我正在从我的 Ruby 脚本中脱 shell 以调用系统命令,如下所示

puts "Reached point #1"

begin
system("sh my_shell_script.sh")
rescue StandardError => e
puts "There was an error"
end

puts "Reached point #2"

我故意在我的 shell 脚本中添加了一个错误,因此它会失败(即我将“echo”拼写为“eho”)。我希望我的 Ruby 脚本会输出它到达标记 #1,然后挽救错误以显示“出现错误”。

相反,我得到:

"Reached point #1"
line 1: eho: command not found
"Reached point #2"

它肯定会抛出正确的错误,但是 system(...) 的 shell 错误并没有被挽救。有什么想法吗?

最佳答案

来自documentation for Kernel#system :

system returns true if the command gives zero exit status, false for non zero exit status. Returns nil if command execution fails. An error status is available in $?.

这意味着您有多种方法可以继续(没有一种方法涉及挽救引发的错误),具体取决于您想要的失败信息。如果您只想区分成功执行零退出状态的命令与所有形式的失败,这是您的代码的翻译:

puts "Reached point #1"

unless system("sh my_shell_script.sh")
puts "There was an error"
end

puts "Reached point #2"

您当然可以通过查看返回值来区分命令执行失败和非零退出状态,如果需要,您可以根据文档从 $? 获取退出状态代码.

关于ruby - 在 Ruby 中拯救 bash/系统 STDERR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17137914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com