У меня есть набор универсального кода очистки, который необходимо выполнять при выходе из определенного сценария bash, независимо от того, был ли он завершен нормально или был прерван. Я решил использовать псевдосигнал trap "..." 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;
Однако это не работает. Запуск следующего кода никогда не будет повторять «Test». Добавление явного exit
вызова после done=true;
ничего не меняет. Чего мне не хватает?
Ура!