Выход с сообщением об ошибке в bash (oneline)
Возможно ли выйти с ошибкой с сообщением без с помощью операторов if?
[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit ERRCODE "Threshold must be an integer value!"
Конечно, правая сторона ||
не будет работать, просто чтобы дать вам лучшее представление о том, чего я пытаюсь выполнить.
На самом деле, я даже не возражаю, с каким кодом ERR он собирается выйти, просто чтобы показать сообщение.
ИЗМЕНИТЬ
Я знаю, что это сработает, но как подавить numeric arg required
показ
после моего пользовательского сообщения?
[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit "Threshold must be an integer value!"
Ответы
Ответ 1
exit
не принимает более одного аргумента. Чтобы распечатать любое сообщение, как вы хотите, вы можете использовать echo
, а затем выйти.
[[ $TRESHOLD =~ ^[0-9]+$ ]] || \
{ echo "Threshold must be an integer value!"; exit $ERRCODE; }
Ответ 2
Вы можете использовать вспомогательную функцию:
function fail {
printf '%s\n' "$1" >&2 ## Send message to stderr. Exclude >&2 if you don't want it that way.
exit "${2-1}" ## Return a code specified by $2 or 1 by default.
}
[[ $TRESHOLD =~ ^[0-9]+$ ]] || fail "Threshold must be an integer value!"
Имя функции может быть другим.
Ответ 3
Использование exit
напрямую может быть сложным, так как сценарий может быть получен из других мест. Вместо этого я предпочитаю использовать subshell с set -e
(плюс ошибки должны входить в cerr, а не cout):
set -e
[[ $TRESHOLD =~ ^[0-9]+$ ]] || \
(>&2 echo "Threshold must be an integer value!"; exit $ERRCODE)