
Я пишу скрипт оболочки. Этот скрипт оболочки выполняется в bash
оболочке внутри терминала. Он содержит центральную функцию обработки ошибок. Пожалуйста, посмотрите следующий базовый фрагмент демо:
function error_exit
{
echo "Error: ${1:-"Unknown Error"}" 1>&2
exit 1 # This unfortunately also exits the terminal
}
# lots of lines possibly calling error_exit
cd somewhere || error_exit "cd failed"
rm * || error_exit "rm failed"
# even more lines possibly calling error_exit
Функция обработки ошибок должна завершать скрипт, но НЕ должна завершать терминал. Как этого добиться?
решение1
Используйте встроенную bash
функцию trap
для создания bash
экземпляра при выходе из скрипта:
trap 'bash' EXIT
От help trap
:
trap: trap [-lp] [[arg] signal_spec ...]
Trap signals and other events.
Defines and activates handlers to be run when the shell receives signals
or other conditions.
ARG is a command to be read and executed when the shell receives the
signal(s) SIGNAL_SPEC. If ARG is absent (and a single SIGNAL_SPEC
is supplied) or `-', each specified signal is reset to its original
value. If ARG is the null string each SIGNAL_SPEC is ignored by the
shell and by the commands it invokes.
If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.
trap 'bash' EXIT
Таким образом , при запуске bash
будет выполнено чтение и выполнение, когда оболочка получит сигнал EXIT; создание интерактивной оболочки впоследствии приведет к предотвращению закрытия терминала:
function error_exit
{
echo "Error: ${1:-"Unknown Error"}" 1>&2
exit 1 # This unfortunately also exits the terminal
}
trap 'bash' EXIT
# lots of lines possibly calling error_exit
cd somewhere || error_exit "cd failed"
rm * || error_exit "rm failed"
# even more lines possibly calling error_exit