Jak utworzyć serię poleceń w powłoce, która przerwie wykonywanie po błędzie

3

Mój zwykły przepływ pracy git podczas wdrażania jest następujący:

[będąc w gałęzi master]

git pull
git push
git checkout production
git pull
git merge master
git push

Czy byłoby możliwe utworzenie funkcji do wykonywania wszystkich tych poleceń, ale jeśli jedno z nich zwróci błąd (np. Konflikt scalania), to zatrzyma się właśnie tam?

nuc
źródło

Odpowiedzi:

6

Użyj &&, która wykona następujące polecenie tylko wtedy, gdy poprzednie polecenie zakończyło się powodzeniem. $? zwraca polecenie statusu najnowszego polecenia.

function git_checkout()
{
 git pull && git push && git checkout production && git pull && git merge master && git push
 return $?
}
podejrzenie
źródło
3

Ustawienie -ebash spowoduje, że zakończy działanie, jeśli zobaczy niezerowy kod wyjścia w ostatnim poleceniu w łańcuchu poleceń.

#!/bin/bash -e
# or `set -e`
false
echo 'I will never run!'
Ignacio Vazquez-Abrams
źródło
Chodzi o to, że wolałbym to jako funkcję, więc nie muszę dla tego tworzyć osobnego pliku. W każdym razie dziękuję za odpowiedź :)
nie
1

Użyj, ERR_EXITco spowoduje zamknięcie skryptu przy każdym błędzie:

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"
Francisco
źródło