7 votes

Comment puis-je retourner une valeur d'échec à partir d'une fonction bash ?

Arrière-plan

Dans ce message, la solution suivante a été postée :

function cmakerel {
    if expr match "$PWD" '*bld*' >/dev/null ; then
        cmake -D....
    else
        echo "Mauvais répertoire !"
    fi
}

cmakerel invoquera une commande cmake, si PWD contient bld dans son nom.

Cependant, j'invoque normalement cette commande de cette manière : cmakerel && make check

Question

Comment modifier le code ci-dessus pour qu'il renvoie une valeur en cas d'échec, de sorte que la deuxième partie, make check, ne soit pas invoquée ?

Probablement retourner une sorte de valeur non nulle devrait fonctionner.

11voto

Daniel Beck Points 105590

Ajouter

return $?

sous l'appel de cmake pour sortir de la fonction avec le même code de sortie que cmake, et ajouter

return 1

sous l'appel de echo pour sortir avec 1, qui n'est pas zéro et indique donc une erreur.


Vous pouvez également (si vous appelez les deux commandes en combinaison) ajouter l'appel de make à cette fonction :

 cmake [args] && make -j4

Ou, pour permettre par exemple un traitement des erreurs plus détaillé :

cmake [args]
local _ret=$?
if [ $_ret -ne 0 ] ; then
   echo "cmake a retourné le code de sortie $_ret, abandon!" >&2
   return $_ret
fi
make -j4

Si vous l'utilisez comme un programme autonome, c'est-à-dire que vous stockez la fonction dans un script shell, et que vous l'appelez par exemple comme

/chemin/vers/cmakerel.sh

alors vous pouvez utiliser exit au lieu de return pour arrêter le programme/sous-shell entier.

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