#!/bin/sh
function checkExit(){
if test "$?" != "0"; then
echo Command $1 exited with abnormal status
exit 1;
else echo $?
fi
}
function echoThenRun () { # echo and then run the command
echo $1
$1
ret=$?
echo $ret
return $ret
}
file=test_file
echo > $file
echoThenRun "test -f $file"
checkExit $file
echo "all right!"
スクリプト実行の出力:
$ ~/Downloads/test.sh
test -f test_file
0
1 # why 1 here??
all right!
あなたがやっていることのより簡単な方法があります。 set -x
を使用すると、スクリプトは実行前に各行を自動的にエコーします。
また、別のコマンドを実行するとすぐに、$?
はそのコマンドの終了コードに置き換えられます。
簡単なテストアンドフォーゲット以外の方法で変数を処理する場合は、変数にバックアップする必要があります。 [
は、実際には独自の終了コードを持つプログラムです。
例えば:
set -x # make sure the command echos
execute some command...
result="$?"
set +x # undo command echoing
if [ "$result" -ne 0 ]; then
echo "Your command exited with non-zero status $result"
fi
コマンドtest "$?" != "0"
が$を設定するように見えますか? to 1.値$? test
の引数で使用されます。 test
は$を設定しますか? 「0」は語彙的に「0」に等しいため、ゼロ以外の値に。 "!="を指定すると、test
はゼロ以外を返します。