В bash
версии 4.4.12
, когда я печатаю:
set -e
в командной строке оболочка завершает работу, возвращая 128
.
Почему это происходит, когда set -u
все в порядке?
решение1
Если, например, у вас есть команда, которая возвращает ненулевой статус выхода как часть расширения PROMPT_COMMAND
(которое выполняется перед печатью приглашения в bash
), то это приведет к немедленному выходу оболочки, если вы установите errexit
параметр с помощью set -e
.
Другая возможность заключается в том, что существует DEBUG
набор ловушек, который возвращает ненулевой статус выхода. DEBUG
Однако ловушка выполняетсядовызывается команда, поэтому она не приведет к немедленному выходу из оболочки при нажатии Enterпосле set -e
, а вместо этого произойдет выход до запуска следующей команды.
При set -u
установке nounset
параметра оболочки. Этот параметр приведет к тому, что оболочка выдаст ошибку, если вы попытаетесь развернуть любую неустановленную переменную, кроме формы $@
и $*
. Он не приведет к выходу из оболочки, если только set -e
также не действует.
С set -u
вступлением в силуинеустановленная переменная в PS1
оболочкеволявыйдите, как только вы установите errexit
опцию с помощью set -e
.