Захват сигнала Bash не обнаруживает переменные, измененные после объявления блока 'trap'

У меня есть набор универсального кода очистки, который необходимо выполнять всякий раз, когда завершается определенный сценарий 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; ничего не меняет. Что мне не хватает?

Ура!

9
задан Jolta 11 April 2017 в 08:16
поделиться