Ввод `set -e` убивает bash

Ввод `set -e` убивает bash

В 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.

Связанный контент