Выход из скрипта Bash при ошибке (set -e) закрывает SSH-сессию putty

Я использую set -e для принудительного завершения работы моего скрипта при возникновении ошибки при выполнении команды. Однако это имеет побочный эффект закрытия окна терминала замазки, которое я использую для подключения через SSH к хосту.

Как я могу остановить закрытие терминала?

1 ответ

Решение

Как у вас работает скрипт? Обстоятельства выхода из подпроцесса не должны влиять на оболочку, в которой он запущен... если только вы не включили сценарий в свою запущенную оболочку.

Например...

./my-script.sh # this should terminate and leave your shell intact
. my-script.sh # this might terminate and take your shell with it

Оболочка 'nix - это запущенный процесс некоторого интерпретатора оболочки (например, bash, ksh, csh). "источник" скрипта (который вы можете сделать в bash с командой source или его псевдоним .) сообщает интерпретатору открыть указанный файл и обработать его содержимое. По сути, скрипт становится ярлыком для интерактивного ввода команд. Определенные функции, набор переменных и (в вашем случае) exitОбработанные вступают в силу в оригинальной оболочке.

./my-script.sh простой путь к файлу ./ ссылается на текущий каталог и my-script.sh к сценарию в этом каталоге. Когда файл помечен как исполняемый, файл будет выполнен. В случае сценария это означает запуск нового процесса интерпретатора (как определено #! строка в верхней части скрипта, или /bin/sh по умолчанию) и использует его для интерпретации сценария. Определенные функции, набор переменных и exitОбработанные данные ограничены этим новым процессом интерпретатора.

Другие вопросы по тегам