Функция 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,