Как отловить ошибки в функциях bash?

У меня есть скрипт bash с такими функциями:

GetData () {
  set -e
  wget -P /temp http://google.com/foooo.tar.gz
  wget -P /temp http://google.com/barrr.tar.gz
}

Я выполняю их как:

if ! GetData ; then
  echo "My error description(eg. GetData error)"
  exit 1;
fi

Если я передам неверный URL-адрес wget, он напечатает: 2019-03-12 10:07:06 ERROR 404: Not Found. Но скрипт не завершается в этот момент. Как сделать так, чтобы скрипт завершал работу в случае ошибки в функции? Я пробовал set -e Не получилось.


person Mugen    schedule 12.03.2019    source источник
comment
Опубликуйте минимально воспроизводимый пример. Кроме того, объясните, что вы подразумеваете под ошибками отлова.   -  person melpomene    schedule 12.03.2019
comment
Вам также нужно обрабатывать ошибки wget. if ! wget ....; then return 1; fi; if ! wget ...; then return 1; fi. В противном случае они игнорируются. Или используйте set -e.   -  person KamilCuk    schedule 12.03.2019
comment
@KamilCuk Можно упростить до wget ... || return 1.   -  person melpomene    schedule 12.03.2019
comment
@melpomene Теперь все в порядке?   -  person Mugen    schedule 12.03.2019
comment
Нет, $installDir и $source1URL и $source2URL не ставятся, это не один скрипт, а set -e я нигде не вижу.   -  person melpomene    schedule 12.03.2019
comment
До того, как пример редактирования включал some commands..., я имею в виду, что их может быть несколько. Это единственный способ выполнить каждую команду с оператором if?   -  person Mugen    schedule 12.03.2019
comment
Нет, как сказал Камиль Чук, вы также можете использовать set -e, и, как я сказал, вы также можете использовать ||.   -  person melpomene    schedule 12.03.2019
comment
@melpomene с set -e все еще не выходит   -  person Mugen    schedule 12.03.2019
comment
@Mugen: set -e не распространяется на функции оболочки, вам нужно сделать set -E вне функции   -  person Inian    schedule 12.03.2019
comment
@Mugen Это то, для чего я хотел увидеть минимальный воспроизводимый пример.   -  person melpomene    schedule 12.03.2019
comment
руководство по bash: Если составная команда или функция оболочки выполняется в контексте, где -e игнорируется, ни одна из команд, выполняемых в составе составной команды или тела функции, не будет затронута параметром -e, даже если -e установлен и команда возвращает статус ошибки . Здесь if ! GetData ; игнорирует set -e, поскольку оно находится в проверенном контексте.   -  person melpomene    schedule 12.03.2019