Comment puis-je détecter à l'intérieur d'un shell script si sa sortie standard cible un terminal ou si elle est canalisée vers un autre processus ? (Cas concret : j'aimerais ajouter des codes d'échappement pour colorer la sortie, mais uniquement lorsqu'elle est exécutée de manière interactive, mais pas lorsqu'elle est pipée, de manière similaire à ce qui se passe dans le cas de l'application ls --color
fait.)
Réponses
Trop de publicités?C'est du pur délit :
if [ -t 1 ] ; then echo terminal; fi
renvoie "terminal", car la sortie vous est directement adressée, alors que
(if [ -t 1 ] ; then echo terminal; fi) | cat
ne renvoie rien, car la sortie va vers cat
.
L'option -t est décrite dans les pages du manuel comme suit
-t fd Vrai si le descripteur de fichier fd est ouvert et fait référence à un terminal.
et je profite des affectations habituelles des descripteurs de fichiers
0: stdin
1: stdout
2: stderr
Beano
Points
3021
Dan Moulding
Points
46866