Назад | Перейти на главную страницу

Выход сценария bash при ошибке (set -e) закрывает сеанс SSH с замазкой

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

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

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

Например...

./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 или его псевдоним .) сообщает этому интерпретатору открыть указанный файл и обработать его содержимое. По сути, сценарий становится ярлыком для интерактивного ввода команд. Определены функции, установлены переменные и (в вашем случае) exits обработанные вступают в силу в исходной оболочке.

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