コマンドが成功したか失敗したかを確認し、いくつかのクリーンアップ操作を無条件に実行する必要があります。
順次コマンドを実行するための一般的なオプションはここには適用されないようです。
$ mycmd.sh && rm -rf temp_files/ # correct exit status, cleanup fails if mycmd fails
$ mycmd.sh ; rm -rf temp_files/ # incorrect exit status, always cleans up
$ mycmd.sh || rm -rf temp_files/ # correct exit status, cleanup fails if mycmd succeeds
シェルスクリプトでこれを行うには、次の手順を実行します。
#!/usr/bin/env bash
mycmd.sh
RET=$?
rm -rf temp_files
exit $RET
これらのすべてのコマンドをセミコロンで連結するよりも、コマンドラインでこれを行うより慣用的な方法はありますか?
ベストアンサー1
スクリプトの改行はほぼ常にセミコロンと同じです。
mycmd.sh; ret=$?; rm -rf temp_files; exit $ret
編集者への回答:
trap
または、次のようにサブシェルを使用できます。
( trap 'rm -rf temp_files' EXIT; mycmd.sh )