Вы можете немного изменить свой скрипт таким образом
#!/bin/bash … ./update_artifact1.sh $ARTIFACT_VERSION exit_state_1=$? ./update_artifact2.sh $ARTIFACT_VERSION exit_state_2=$? ./update_artifact3.sh $ARTIFACT_VERSION exit_state_3=$? exit_state_all=$[ $exit_state_1 && $exit_state_2 && $exit_state_3 ] exit $exit_state_all
Замечания:
- Каждая команда возвращает код выхода, который
bash
хранится в$?
. Это0
если нет ошибки, или другой номер, если есть ошибка.
После каждой строки значение$?
обновляется, поэтому вам необходимо сохранить переменную (в данном случае мы использовалиexit_state_1
...exit_state_n
).
В конце вы хотите, чтобы ваш скрипт возвращал вам только код ошибки с 0, если все в порядке, и мы реализуем его с помощью$[ $a || $b || $c ]
.
Обратите внимание, что это значение$[ 0|| 0 || 0 ]
равно 0,$[ $a || $b || $c ]
хотя бы один из них$a,$b,$c
не равен0
1. - Важно то ! в первой строке, когда вам нужно написать,
#!/bin/bash
чтобы сказать системе, что это скрипт, который должен быть выполнен вbash
оболочке.
Вы можете найти интересную информацию о Шебанге здесь. - Как отмечалось и в комментарии, если вы поместите
set -e
где-нибудь в свой сценарий перед этой строкой, сценарий будет прерван при первой ошибке, не обрабатывая другую строку, и вернет код ошибки (один из последней выполненной команды).