Как создать серию команд в оболочке, которая остановит выполнение при ошибке
Мой обычный рабочий процесс git для развертывания следующий:
[пока на главной ветке]
git pull
git push
git checkout production
git pull
git merge master
git push
Можно ли создать функцию для выполнения всех этих команд, но если одна из них возвращает ошибку (т. Е. Конфликт слияния), она тут же останавливается?
3 ответа
Решение
Используйте &&, которая будет выполнять следующую команду только в случае успешного выполнения предыдущей команды. $? возвращает команду статуса самой последней команды.
function git_checkout()
{
git pull && git push && git checkout production && git pull && git merge master && git push
return $?
}
Настройка -e
В bash он завершит работу, если увидит ненулевой код завершения в последней команде в цепочке команд.
#!/bin/bash -e
# or `set -e`
false
echo 'I will never run!'
Использование ERR_EXIT
что заставит ваш скрипт завершиться при любой ошибке:
emulate -L zsh # do not change the environment outside the script
# If a command has a non-zero exit status, execute the ZERR trap,
# if set, and exit.
setopt ERR_EXIT
cd /jhkljhlk # <-- file does not exit and ls gives an error
echo "this will not run"