Примечание: это не дубликат Есть ли в bash эквивалент die error msg , как показано в конце этого поста.
Рассмотрим функцию оболочки
foo () {
echo "testing..." 1>&2
return 1
echo "should never reach this point" 1>&2
}
Ниже показано ожидаемое поведение foo:
% foo || echo $?
testing...
1
Я хотел бы инкапсулировать функциональность, показанную в первых двух строках foo, в функцию die, чтобы определение foo можно было сократить до
foo () {
die 1 "testing..."
echo "should never reach this point" 1>&2
}
... при этом сохраняя свое первоначальное поведение.
Меня интересует в первую очередь zsh, но мне также будут интересны ответы, подходящие для сценариев bash и/или /bin/sh, если они различаются.
Кстати, это не сработает:
die () {
local exit_code=$1
shift
echo "$*" 1>&2
exit $exit_code
}
Если запустить из командной строки версию foo, которая использует этот die, результатом будет уничтожение текущего шелла (по крайней мере, это результат, который я получаю, когда пытаюсь сделать что-то подобное). Вот почему этот вопрос не является дубликатом Есть ли в bash эквивалент сообщения об ошибке. Во всяком случае, ответ на этот другой вопрос не удовлетворит здесь моих требований.