I686/32ビットデュアルCPUで、Debian Stretchを新たにインストールし、Octave 4.2.1をインストールし、実行権限を付与した後、./mytest
を実行しました。
#!/bin/bash
./mytest.m
ここで、test.m
は
#!/usr/bin/octave
exit(0)
~/tmp
に格納されている2つのスクリプトを考えると、mytest
#!/bin/bash
if $1/mytest.m "$2"; then
echo "good"
else
echo "bad"
fi
およびmytest.m
#!/usr/bin/octave
param = argv(){1};
if strcmp(param, "happyend")
exit(0)
else
exit(1)
end
tmp/mytest tmp happyend
を実行すると、通常はhappyend
がmytest
に渡され、続いてmytest.m
に渡され、信号0がmytest
に戻され、 'goodが出力されます。 '。では、変数のmytest.m
からリターン(終了)コードを取得するにはどうすればよいですか? (上記の例では0)。
直感的なオプション
#!/bin/bash
result=$("$1"/mytest.m "$2")
if [ $result = 0 ]; then
echo "good"
else
echo "bad"
fi
動作しません。
コマンドから戻り(終了)コードを取得するには、$?
値をおそらくresult
という変数に保存する必要があります。
"$1/mytest.m" "$2"
result=$?
if [ "$result" -eq 0 ]; then
echo "good"
else
echo "bad"
fi
テストするのに十分な時間だけ結果を保存したい場合は、次のようにresult
変数をスキップします。
"$1/mytest.m" "$2"
if [ $? -eq 0 ]; then
echo "good"
else
echo "bad"
fi
ただし、mytest.mの実行後すぐに$?
をテストするように注意してください。後続のコマンドは、theirリターンコードを$?
に入れます。
結果がゼロかどうかだけをテストしたい場合は、整数として扱う必要はありません。コマンド自体を条件付きとして扱うだけです。
if "$1/mytest.m" "$2"; then
echo "good"
else
echo "bad"
fi