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

Другие вопросы по тегам