Une façon courante est:
die() {
IFS=' ' # make sure "$*" is joined with spaces
# output the arguments if any on stderr:
[ "$#" -eq 0 ] || printf '%s\n' "$*" 1>&2
exit 1
}
alors vous l'utilisez comme ceci:
mkdir -p some/path || die "mkdir failed with status $?"
Ou si vous voulez qu'il inclue le statut de sortie, vous pouvez le changer en:
die() {
last_exit_status=$?
IFS=' '
printf '%s\n' "FATAL ERROR: $* (status $last_exit_status)" 1>&2
exit 1
}
puis l'utiliser est un peu plus simple:
mkdir -p some/path || die "mkdir failed"
En cas d'échec, vous mkdir
aurez probablement déjà émis un message d'erreur, de sorte que le second peut être considéré comme redondant, et vous pouvez simplement faire:
mkdir -p some/path || exit # with the same (failing) exit status as mkdir's
mkdir -p some/path || exit 1 # with exit status 1 always
(ou utilisez la première variante de die
ci - dessus sans argument)
Juste au cas où vous ne l'auriez pas vu command1 || command2
auparavant, il s'exécute command1
et s'il command1
échoue, il s'exécute command2
.
Vous pouvez donc le lire comme "créer le répertoire ou mourir".
Votre exemple ressemblerait à:
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Ou vous pouvez aligner le dies
plus à droite pour que le code principal soit plus évident.
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Ou sur la ligne suivante lorsque les lignes de commande sont longues:
mkdir -p some/path ||
die "mkdir failed"
cd some/path ||
die "cd failed"
some_command ||
die "some_command failed"
De plus, si vous prévoyez d'utiliser le nom some/path
plusieurs fois, stockez-le dans une variable afin de ne pas avoir à le taper et pouvez facilement le modifier si vous en avez besoin. Et lorsque vous passez des arguments variables à des commandes, assurez-vous d'utiliser le --
délimiteur d'options pour que l'argument ne soit pas pris comme option s'il commence par -
.
dir=some/path
mkdir -p -- "$dir" || die "Cannot make $dir"
cd -P -- "$dir" || die "Cannot cd to $dir"
some_command || die "Cannot run some_command"