1. ホーム
  2. bash

[解決済み] Bashスクリプトが終了する前にコマンドを実行するには?

2022-05-14 03:09:03

質問

Bashスクリプトに set -e があり、スクリプト内のコマンドがエラーを返した場合、スクリプトが終了する前にどのようにクリーンアップを行うことができますか?

例えば

#!/bin/bash
set -e
mkdir /tmp/foo
# ... do stuff ...
rm -r /tmp/foo

どうすれば /tmp/foo の中のコマンドが削除されるようにするには、どうすればよいでしょうか。 ... do stuff ... が失敗しても削除されるのですか?

どのように解決するのですか?

トラップの使用例です。

#!/bin/bash -e

function cleanup {
  echo "Removing /tmp/foo"
  rm  -r /tmp/foo
}

trap cleanup EXIT
mkdir /tmp/foo
asdffdsa #Fails

出力します。

dbrown@luxury:~ $ sh traptest
t: line 9: asdffdsa: command not found
Removing /tmp/foo
dbrown@luxury:~ $

asdffdsa行が失敗しても、クリーンアップがまだ実行されていることに注意してください。