2

次のように、Ruby スクリプトからシェルを実行してシステム コマンドを呼び出しています。

puts "Reached point #1"

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

puts "Reached point #2"

失敗するように、意図的にシェル スクリプトにエラーを追加しました (つまり、"echo" を "eho" と綴っています)。Ruby スクリプトがマーカー #1 に到達したことを出力し、エラーを救出して「エラーが発生しました」と表示することを期待します。

代わりに、私は得ています:

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

確かに正しいエラーがスローされますが、system(...) からのシェル エラーは解決されません。理由について何か考えはありますか?

4

2 に答える 2

1

代わりに、私は得ています:

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

言い換えれば、それは救助されましたが、あなたが期待している方法ではありません.

あなたが実際に望んでいるのは、おそらく次のようなものです。

ret = system("sh my_shell_script.sh")
puts $? unless ret

http://www.ruby-doc.org/core-2.0/Kernel.html#method-i-system

于 2013-06-16T21:35:18.020 に答える