(16 réponses)
Fermé l'année dernière.
J'ai un script de construction qui exécute une longue commande qui produit beaucoup de sortie qui ressemble à ceci :
./compile
Afin de dépanner les performances de compilation, je souhaite utiliser ts
(de moreutils) qui préfixe chaque ligne de sortie avec un horodatage. J'ai donc mis à jour mon script comme ceci :
bash -c "./compile | ts '[%Y-%m-%d %H:%M:%S]'"
Cela fonctionne, mais maintenant la valeur de sortie est toujours , événement lors de la
compile
échoue (je pense, parce que ts
sort sans erreur).
Comment puis-je mettre à jour mon script pour renvoyer compile
code de sortie lors de l'utilisation de ts
?
Réponse acceptée :
Puisque vous utilisez Bash, vous pouvez utiliser son $PIPESTATUS
qui est un tableau contenant les différents codes de sortie des commandes d'un pipeline :
bash -c './compile | ts "[%Y-%m-%d %H:%M:%S]"; exit "${PIPESTATUS[0]}"'
zsh
a une fonctionnalité similaire mais utilise le $pipestatus
tableau à la place (rappelez-vous également zsh
les tableaux sont numérotés à partir de 1
, pas ).