Я пишу сценарий, который должен быть выполнен с помощью source
потому что его задача состоит в том, чтобы изменить среду. Во время сценария я хочу использовать set -e
так что любая ошибка останавливает скрипт. Сценарий выглядит так:
#!/bin/bash
set -e
# do something
cd somewhere
source anotherScript
Проблема в том, что set -e
естественно остается в силе после завершения сценария. Как я могу гарантировать, что измененный set
опция правильно восстанавливается до прежнего значения при остановке скрипта (каким-либо образом - либо при успешном завершении, либо при ошибке)?
bash
script
bash-scripting
Petr Pudlák
источник
источник
-x
/xtrace
вариант) рассматривается по адресу Подавить трассировку выполнения команды echo?Ответы:
Точно так же, как вы активируете его: вызов встроенного
set
:От
bash(1)
Manpage, подSHELL BUILTIN COMMANDS
section, команда set:источник
set -o
чтобы узнать ваши текущие настройки. Будьте явными при установке / снятии любого из них в ваших сценариях.Команда
set +o
перечисляет текущие настройки как команды, которые восстанавливают то же состояние, напримерВы можете легко восстановить все параметры позже, если сохраните этот вывод в переменную оболочки:
Bash также включает ряд нестандартных (не POSIX) опций, которые настраиваются с помощью
shopt
команда. Командаshopt -p
можно использовать для сохранения этих параметров аналогичным образом.Если вы хотите сохранить и восстановить только один параметр, вы можете использовать переменную $ - environment, которая перечисляет текущий набор параметров в виде букв, например,
Вы можете использовать что-то вроде этого для сохранения и восстановления определенной опции:
источник
Используйте ловушку ВОЗВРАТА
RETURN
ловушки работают и для скриптов с исходным кодом.main_script.sh
a_script_to_be_sourced.sh
Тестовое задание
источник
Восстановление предыдущего активированный Настройки можно быстро сделать так:
С другой стороны (восстановление в выключенное состояние) AFAIK такого ярлыка нет, и ответ Сеппо охватывает все случаи.
источник