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