Почему прерывание ERR не работает для команды при выходе с двойным амперсандом (&&) с ненулевым значением - PullRequest
0 голосов
/ 07 ноября 2019

Я знаю, что вы можете отловить команду сбоя с помощью set -e и trap 'exit' ERR, но когда я попытался

trap 'exit' ERR

true && echo "from true"
false && echo "from false"
echo "end"

, я получил это

#result
from true
end

#what I want
from true

Я знаю, что могу сделатьчто-то вроде этого

true && echo "from true" || exit 1
false && echo "from false" || exit 1

но я должен делать это каждую строку, которую я использую &&

1 Ответ

1 голос
/ 07 ноября 2019

Переопределите echo в вашем скрипте с помощью функции, которая завершается:

echo () {
    builtin echo "$@"
    exit 1
}

Если вам нужно echo без exit где-нибудь, переименуйте функцию в echexit или любую другую и используйте ее всоответствующие места.

...