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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
commande | tee -a monfichier.log
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
1
2
3
commande | tee -a monfichier.log
# Vaut toujours 0
echo $?
D'où la question : comment faire, donc, pour récupérer l'exit code de "commande" ?

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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
tee -a monfichier.log |&
commande >&p
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 > /dev/tty |&
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) ?

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é.