web-dev-qa-db-fra.com

Écriture essayer attraper enfin en shell

Existe-t-il une commande linux bash telle que la Java try catch enfin?) Ou le shell Linux continue-t-il toujours?

try {
   `executeCommandWhichCanFail`
   mv output
} catch {
    mv log
} finally {
    rm tmp
}
55
Jetse

Eh bien, en quelque sorte:

{ # your 'try' block
    executeCommandWhichCanFail &&
    mv output
} || { # your 'catch' block
    mv log
}

 rm tmp # finally: this will always happen
87
Faiz

D'après votre exemple, il semblerait que vous essayiez de faire quelque chose de similaire à la suppression constante d'un fichier temporaire, quelle que soit la façon dont le script se termine. Pour ce faire, essayez avec la commande intégrée trap de capturer le signal EXIT.

#!/bin/bash

trap 'rm tmp' EXIT

if executeCommandWhichCanFail; then
    mv output
else
    mv log
    exit 1 #Exit with failure
fi

exit 0 #Exit with success

L'instruction rm tmp Dans trap est toujours exécutée à la fermeture du script. Le fichier "tmp" essaiera toujours d'être supprimé.

Les pièges installés peuvent également être réinitialisés. un appel à intercepter avec uniquement un nom de signal réinitialisera le gestionnaire de signaux.

trap EXIT

Pour plus de détails, voir la page de manuel bash: man bash

81
theycallhimart

mv prend deux paramètres, alors peut-être avez-vous vraiment voulu modifier le contenu du fichier de sortie:

echo `{ execCommand && cat output ; } || cat log`
rm -f tmp
1
user1728219