1. ホーム
  2. ruby

[解決済み] ruby システムコマンドの終了コードチェック

2022-08-21 21:42:51

質問

以下のような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

どのように解決するのですか?

からの ドキュメント :

システムリターンズ true を返します。 false である。 である。戻り値 nil を返します。

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