У меня есть набор универсального кода очистки, который необходимо выполнять всякий раз, когда завершается определенный сценарий bash, независимо от того, завершился ли он нормально или был прерван. Я решил использовать ловушку "..." EXIT
, чтобы добиться этого.
В дополнение к общей очистке существует еще одна часть специальной очистки, которая должна выполняться только в том случае, если сценарий завершается нормально. Я думал, что могу вызвать это, если блок 'trap' проверит переменную, например:
#!/bin/bash
done=false;
trap "{
#generic cleanup code goes here.
if $done
then
#cleanup to be done only on completion goes here.
echo Test;
fi
}" EXIT
#main script goes here
done=true;
Однако это не сработает. Выполнение следующего кода никогда не отобразит «Тест». Добавление явного вызова exit
после done = true;
ничего не меняет. Что мне не хватает?
Ура!