シェルコマンド(スクリプトではなく)から「保証」/「最終」機能を取得しますか?

シェルコマンド(スクリプトではなく)から「保証」/「最終」機能を取得しますか?

コマンドが成功したか失敗したかを確認し、いくつかのクリーンアップ操作を無条件に実行する必要があります。

順次コマンドを実行するための一般的なオプションはここには適用されないようです。

$ 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 )

おすすめ記事