Функция Bash, возвращаемое значение и обработка ошибок
Я пытаюсь обернуть голову вокруг Баша и думаю, что зашел довольно далеко. Что я действительно пока не понимаю, так это обработка ошибок...
У меня есть следующий скрипт:
set -e
set -u
DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP")
if [[ $? != 0 ]]; then
exit 1
fi
Даже если функция downloadApplication не работает (мой ожидаемый результат сейчас), скрипт НЕ терпит неудачу. Я не могу понять, как это проверить при записи вывода в переменную. Если я не помещу это обратно в переменную, это работает и терпит неудачу как ожидалось:
downloadApplication "$WEB_GROUP"
if [[ $? != 0 ]]; then
exit 1
fi
Какие у меня варианты? Благодарю.
3 ответа
Как насчет этого?
DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP" || echo "SomeErrorString")
if [ $DOWNLOADED_ARTIFACT == "SomeErrorString" ]; then
exit 1
fi
Что значит "если downloadApplication
не удачно, тогда эхо SomeErrorString
" (Так что ваши DOWNLOADED_ARTIFACT
будет установлен в SomeErrorString
, Тогда вы можете сравнить с этим значением.
Ваша обработка ошибок работает нормально для меня. На самом деле, с set -e
скрипт завершается в строке выполнения и назначения, потому что результат не проверен. Вы уверены, что downloadApplication
выход с правильным кодом выхода? Попробуйте выполнить downloadApplication "$WEB_GROUP"; echo $?
прямо в командной строке.
Кстати, вы можете проверить код возврата и зафиксировать вывод в одном выражении:
if ! DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP"); then
echo "Download failed"
exit 1
fi
do_something $DOWNLOADED_ARTIFACT
Команда DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP")
всегда будет иметь успех, потому что важно для $?
является присваиванием переменной, которая (почти) гарантированно будет успешной, либо с присваиванием 0
или же 1
в DOWNLOADED_ARTIFACT
,