2011-02-23 2 views
4

J'ai un script bash qui exécute plusieurs commandes dans l'ordre et s'arrête si l'on renvoie un code d'erreur non nul et affiche le numéro de ligne pour aider à localiser la commande.Script Wrapper pour quitter le script principal avec débogage

Après chaque commande, j'exécute une fonction (exitIfLastCommandReturnCodeNotZero) qui vérifie si le code de sortie était correct et si ce n'est pas le cas, il affiche le numéro de ligne et le code d'erreur. Par exemple:

.. 
cmd1 param1 param2 ; exitIfLastCommandReturnCodeNotZero $? $LINENO 
cmd2 param1 param2 ; exitIfLastCommandReturnCodeNotZero $? $LINENO 
cmd3 param1 param2 ; exitIfLastCommandReturnCodeNotZero $? $LINENO 
.. 

Cela fonctionne bien, mais est-il une fonction ou un script intégré qui peut simplement envelopper les commandes et me donner les mêmes fonctionnalités? Par exemple:

.. 
wrapperScript cmd1 param1 param2 
wrapperScript cmd2 param1 param2 
wrapperScript cmd3 param1 param2 
.. 

ou mieux encore une fonction de niveau « bloc » qui exécute toutes les commandes et les sorties si une commande échoue. Par exemple:

WRAPPERSCRIPT_PSEUDOCODE { 
.. 
cmd1 param1 param2 
cmd2 param1 param2 
cmd3 param1 param2 
.. 
} 

Idéalement, la sortie lorsqu'une commande ne devrait également inclure (à l'exception du numéro de ligne) le nom de la commande et les paramètres.

Répondre

2

Utilisez un piège. Vous pouvez activer et désactiver le piège à divers endroits dans votre code si vous le souhaitez.

#!/bin/bash 
function error 
{ 
    local err=$? 
    echo "error# $err on line $BASH_LINENO: $BASH_COMMAND" 
    exit $err 
} 
trap error ERR 
# Some commands ... 
echo bar 
/bin/false foo # For testing 
echo baz 

exitIfLastCommandReturnCodeNotZero sérieux?

+0

Vous pouvez définir '-E' si les fonctions, et sous-couches substitutions de commandes héritent le piège. –

+0

c'est génial. – zaf

0

Je suggère de commencer chaque script avec set -Eeu.

Voir les documents connexes après: Error handling in Bash

Questions connexes