Выход из скрипта 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Обработанные данные ограничены этим новым процессом интерпретатора.