Gestion des erreurs dans une chaine de tubes - Shell/Batch - Programmation
Marsh Posté le 13-05-2009 à 16:39:59
En bash, il est possible d'activer un flag pour qu'une chaine de tube échoue si l'une des commandes à l'interieur échoue => set -o pipefailed
Marsh Posté le 13-05-2009 à 17:49:44
Ah, je le note celui-ci, je ne connaissais pas cette option.
Marsh Posté le 12-05-2009 à 17:20:23
Bonjour,
J'ai un souci quant à l'utilisation d'un pipe entre deux commandes.
Je veux executer une commande en la redirigeant dans une autre : cmd1 | cmd2
D'après toutes les informations que j'ai trouvées et d'après mes tests, la valeur de retour de cette chaine de tube est la valeur de retour de la dernière commande donc cmd2 ici.
Ce que je voudrais c'est que si l'une des commandes constituant le tube termine en erreur, la valeur de retour globale soit une erreur. Dans l'exemple, si cmd2 se termine en erreur et cmd1 correctement, je voudrais que la valeur de retour globale soit une erreur.
Dans mon cas, je redirige la sortie standard de slapcat vers dd pour tester si l'ecriture se passe bien. En effet, slapcat ne renvoie pas d'erreur si il n'y a plus de place sur le disque et donc on ne peut pas savoir si le fichier a été correctement écrit. En redirigeant la sortie vers dd, je peux récupérer l'erreur d'ecriture cependant je ne peux pas savoir si slapcat s'est bien terminé ou si il s'est terminé en erreur.
Existe t il un moyen d'avoir ce comportement, à savoir si une commande dans la chaine de tubes est en erreur, le retour est une erreur ?
Je trouve étrange ce comportement du pipe. D'après moi, dans beaucoup de cas, les commandes pouvant vraiment se terminer en erreur sont à la première place (je ne pense pas qu'un tr, grep ou autre ait de grandes chances de ne pas faire ce qu'on leur demande...). L'utilisation du pipe rend donc impossible la gestion des erreurs ?
Merci d'avance pour vos réponses