Bonjour à tous.
Dans un script KSH, j'utilise la commande tee pour afficher sur le terminal et loguer les messages affichés sur la sortie standard de la manière suivante :
Jusqu'ici tout va bien, ça marche. Maintenant, compliquons un peut les choses : je voudrais pourvoir savoir quand "commande" echoue en vérifiant l'exit code ($?). Seul souci : comme j'utilise un pipe (|), l'exit code que je peut tester, c'est celui de tee qui vaut toujours 0 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part commande | tee -a monfichier.log
D'où la question : comment faire, donc, pour récupérer l'exit code de "commande" ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 commande | tee -a monfichier.log # Vaut toujours 0 echo $?
J'ai trouvé une solution en utilisant les coprocesses, mais j'aimerais votre avis : je lance tee en coprocess sur lequel je redirige ma commande :
En l'état, je n'ai que la moitié des choses, à savoir le fichier de logs : tee n'affiche plus rien sur le terminal. Du coup, j'ai complété ma commande tee pour rediriger la sortie standard vers /dev/tty :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tee -a monfichier.log |& commande >&p
Ca marche super, mais je trouve ça limite : y a-t-il des effets non désirés ou non désirables à utiliser /dev/tty ? Pourquoi ne pas utiliser plutôt /dev/pts/n (i.e. ce qui est renvoyé par la commande tty) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tee -a monfichier.log > /dev/tty |& commande >&p
Votre avis m'intéresse : pour /dev/tty, tapez 1, pour /dev/pts/n, tapez 2, pour autre chose, tapez 3. Clic non surtaxé, coût de la connexion non remboursé.
Partager