最後のコマンドの終了コードを処理する正しい方法は何ですか?

最後のコマンドの終了コードを処理する正しい方法は何ですか?

私は現在POSIXシェルスクリプトでこれを行っています。

success=false

pv --wait "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename" && success=true

if [ "$success" = "true" ]
...

問題は、私がこれを正しくしているかどうかわからないということです。

たとえば、私はこのアプローチだけです$?

なぜ私は気にしますか?

まあ、なぜならShellCheck.net私に警告する:

SC2181$? を使用して間接的に確認するのではなく、「if mycmd;」を使用して直接終了コードを確認してください。

ベストアンサー1

コマンドが成功したことを確認する必要がある場合は、このif command; then foo; else bar; fi方法を使用してください。

ただし、何らかの理由でより複雑なエラー処理が必要な場合は、確認された値が$?より適切になります。

command
case $? in
  0) foo ;;
  1) bar ;;
  2) baz ;;
  *) something_else ;;
esac

おすすめ記事