コマンドの終了コードを抽出するには? [コピー]

コマンドの終了コードを抽出するには? [コピー]

コマンドの終了コードを抽出して条件付きで使用するにはどうすればよいですか?たとえば、次のスクリプトを見てください。

i=4
if [[ $i -eq 4 && $(command) -eq 0 ]]
    then
            echo "OK"
    else
            echo "KO"
    fi

両方の条件が満たされると、スクリプトは操作を実行する必要があります。 2番目の場合は、上記のスクリプトのコマンド出力の代わりに終了ステータスを確認して、コマンドが成功したかどうかを確認する必要があります。

答え1

if [ "$i" -eq 4 ] && command1; then
   echo 'All is well'
else
   echo 'i is not 4, or command1 returned non-zero'
fi

$(command) -eq 0コードに示すようにテストします。出力command終了コードの代わりに。

command1注:私はasではなく標準ユーティリティの名前を使用していますcommandcommand

答え2

$(somecmd)出力をキャプチャしますsomecmd。コマンドの終了コードを確認するには、ifステートメントの条件付き部分に直接入力するだけです。

i=4
if [[ $i -eq 4 ]] && false ; then
     echo this will not print
fi
if [[ $i -eq 4 ]] && true ; then
     echo this will print
fi

答え3

終了コードをキャプチャするには、コマンドを実行した直後(他のコマンドを実行する前)に$?を使用します。それからあなたは次のことをすることができます

ls /proc/$PPID/fd
ls=$?
if test $ls != 0; then
  echo "foo failed"
  if test $ls = 2; then
    echo "  quite badly at that"
  fi
fi

つまり、終了コードに関連する式を複数回評価できます。

関連情報