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?

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 $?
}

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!'

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"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.