Menu Fermer

Comment utiliser la commande tee avec des exemples

Lorsque l’utilisateur exécute une commande dans un shell interactif Linux, la sortie s’affiche dans le terminal texte. Cependant, il existe des moyens de modifier ce comportement en utilisant des commandes shell supplémentaires connectées dans un pipeline.

La commande tee lit l’entrée standard (stdin) et l’écrit à la fois sur la sortie standard (stdout) et dans un ou plusieurs fichiers. tee fait généralement partie d’un pipeline, et un nombre quelconque de commandes peuvent la précéder ou la suivre.

Dans ce tutoriel, vous apprendrez à utiliser la commande tee sous Linux pour gérer la sortie d’une commande.

Comment utiliser la commande tee avec des exemples

La syntaxe de la commande tee

Comme expliqué précédemment la commande tee lit l’entrée standard et l’écrit à la fois dans la sortie standard et dans un fichier.
C’est une commande pratique pour rediriger les résultats d’une commande dans un fichier tout en affichant la sortie à l’écran.
Généralement, on l’utilise dans les script bash.

Comprendre le fonctionnement de la commande (schéma)

La syntaxe est la suivante :

[commande] | tee [options] <nom du fichier>

Voici un exemple concret de l’utilisation de la commande tee.
On affiche les informations de l’interface réseau enp0s3 et on passe la sortie à tee en spécifiant le fichier exemple.txt :

ifconfig enp0s3|tee exemple.txt

La sortie de la commande ipconfig apparaît dans le terminal.
Et si on jète un coup au contenu du fichier, obtient aussi celle-ci :

cat exemple.txt
Exemple d'utilisation de la commande tee

Ainsi tee affiche la sortie de la commande ipconfig, tout en la redirigeant vers un fichier.

Comment utiliser la commande tee avec des exemples

Ajouter au fichier donné sans l’écraser

L’écrasement du contenu du fichier est le comportement par défaut de la commande tee.
Utilisez l’argument -a (ou –append) pour ajouter la sortie de la commande à la fin du fichier.

[commande] | tee -a <nom du fichier>

Par exemple, ci-dessous on ajoute du contenu à la fin du fichier grâce à la commande echo.

Ajouter au fichier donné sans l'écraser avec la commande tee

Écriture dans plusieurs fichiers

Utilisez tee suivi d’un nombre quelconque de fichiers pour écrire la même sortie dans chacun d’eux :

[commande] | tee [options] <fichier1> <fichier2> ...

L’exemple ci-dessous montre l’écriture de la sortie de la commande echo dans deux fichiers :

Écriture dans plusieurs fichiers avec la commande tee

Ajout de la sortie de la commande echo à deux fichiers à l’aide de tee.
La commande ls montre que tee a réussi à créer les fichiers exemple1.txt et exemple2.txt.

Masquer la sortie standard du terminal

Pour demander à tee de stocker la sortie de la commande dans un fichier et d’ignorer la sortie du terminal, utilisez la syntaxe suivante :

[commande] | tee [options] <nom du fichier> >/dev/null

Dans l’exemple ci-dessous, tee crée un fichier contenant les données de l’interface réseau, sans passer par la sortie standard :

Masquer la sortie standard du terminal avec la commande tee

Rediriger la sortie d’une commande vers une autre

tee ne doit pas nécessairement être la dernière commande du pipeline. Utilisez-la pour transférer la sortie vers une autre commande :

[commande] | tee [options] <nom du fichier> | [commande]

Dans l’exemple suivant, tee enregistre la sortie de la commande ls dans le fichier exemple.txt et transmet le contenu de ce fichier à la commande grep, qui trouve et affiche toutes les instances du mot “exemple” :

Rediriger la sortie d'une commande vers une autre avec la commande tee

Ignorer les signaux d’interruptions

Passage de la sortie de la commande ls à la commande grep en utilisant tee
Ignorer les interruptions
Pour permettre à tee de se terminer correctement même après que la commande précédente ait été interrompue, ajoutez l’argument -i (ou –ignore-interrupts) :

[commande] | tee -i <nom du fichier>

L’exemple suivant montre Tee écrivant la sortie de la commande ping et terminant l’action avec succès même après que ping ait été interrompu avec Ctrl+C :

Ignorer les signaux d'interruptions de la commande tee

Utiliser tee avec sudo

Pour permettre à tee d’écrire dans un fichier appartenant à l’administrateur ou à un autre utilisateur, placez la commande sudo juste avant tee.

[command] | sudo tee [options] <nom du fichier>

L’exemple ci-dessous montre une tentative infructueuse d’écriture dans le fichier sudoex.txt appartenant à l’utilisateur root. Lorsque la commande sudo est ajoutée, l’opération se termine :

Utiliser tee avec sudo

Diagnostiquer les erreurs d’écriture vers les non tubes

Pour demander à tee d’imprimer un message d’erreur lorsque le processus échoue, utilisez l’argument -p :

[commande] | tee -p <nom du fichier>

L’action par défaut de tee -p est de quitter et d’imprimer le message d’erreur immédiatement après avoir détecté l’erreur d’écriture sur un tube.
Pour modifier le comportement de la commande en cas d’erreur d’écriture, utilisez l’argument –output-error, suivi du mode spécifiant le comportement :

[commande] | tee --output-error=[mode] <nom du fichier>

Il existe quatre modes possibles :

  • warn – diagnostique les erreurs d’écriture sur n’importe quelle sortie.
  • warn-nopipe – diagnostique les erreurs d’écriture sur toute sortie non-pipe.
  • exit – quitte en cas d’erreurs d’écriture sur n’importe quelle sortie.
  • exit-nopipe – quitte en cas d’erreur d’écriture sur n’importe quelle sortie non pipée.