Techioz Blog

Rubyシステムコマンドチェック終了コード

概要

Ruby には次のようなシステムコールがたくさんあり、それらの終了コードを同時にチェックして、そのコマンドが失敗した場合にスクリプトが終了するようにしたいと考えています。

system("VBoxManage createvm --name test1")
system("ruby test.rb")

のようなものが欲しいです

system(“VBoxManage createvm –name test1”, 0) <– ここで、2 番目のパラメーターは終了コードをチェックして、そのシステム コールが成功したことを確認します。失敗した場合は、エラーが発生するか、そのような処理が行われます。

そもそもそれは可能でしょうか?

これに沿って何かを試してみましたが、それもうまくいきませんでした。

system("ruby test.rb")
system("echo $?")

または

`ruby test.rb`
exit_code = `echo $?`
if exit_code != 0
  raise 'Exit code is not zero'
end

解決策

ドキュメントから:

system("unknown command")     #=> nil
system("echo foo")            #=> true
system("echo foo | grep bar") #=> false

さらに

system("VBoxManage createvm --invalid-option")

$?             #=> #<Process::Status: pid 9926 exit 2>
$?.exitstatus  #=> 2