Подтвердить что ты не робот

Выход с сообщением об ошибке в 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!"
4b9b3361

Ответ 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)