3 votes

Comment créer une série de commandes dans Shell, qui arrêtera l'exécution en cas d'erreur.

Mon flux de travail git habituel pour le déploiement est le suivant :

[pendant que sur la branche master]

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

Serait-il possible de créer une fonction pour exécuter toutes ces commandes, mais si l'une d'entre elles renvoie une erreur (c'est-à-dire un conflit de fusion), elle s'arrête là ?

6voto

suspectus Points 4495

Utilisez && qui n'agira sur la commande suivante que si la commande précédente s'est terminée avec succès. $ ? renvoie la commande d'état de la commande la plus récente.

function git_checkout()
{
 git pull && git push && git checkout production && git pull && git merge master && git push
 return $?
}

3voto

Réglage de -e dans bash le fera sortir s'il voit un code de sortie non nul dans la dernière commande d'une chaîne de commande.

#!/bin/bash -e
# or `set -e`
false
echo 'I will never run!'

1voto

Francisco Points 1718

Utilice ERR_EXIT qui fera en sorte que votre script se termine sur toute erreur :

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"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X