私は現在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
答え2
投稿したリンクを基準にすると、次のようになります。
if pv --wait "$input_filename" | openssl enc -aes-256-cbc -d -salt -out "$output_filename"; then
code for true
else
code for false
fi
私のテストでは、これは相手の状態に応じてパイプに問題がある可能性があります。 opensslを使用すると大丈夫だと思いますが、同じcat
パイプであればecho
常に成功すると見なされます。パイプラインの最後のコマンドは正常に終了します。
成功または失敗時に実行されるコマンドが1つしかない場合は、次のことも機能できます。
command && code for success
または
command || code for failure