Vous voulez améliorer cette question ? Ajoutez des détails et clarifiez le problème en modifiant ce message.
Fermé il y a 4 ans.
Améliorer cette question
Après avoir croisé environ 3 tee explications que je considère comme peu didactiques, je demanderais une explication simple, générale et progressive (si possible) sur cette commande, destinée aux nouveaux arrivants Linux.
Je comprends que nous l'utilisons soit via un tube, sur la sortie standard d'une commande, soit directement dans un certain fichier, mais je pense que je manque ce que la commande fait réellement avec ce contenu et quand elle est utile.
Voici donc ce que je demande, en espérant trouver une explication didactique, servie aux nouveaux arrivants de manière claire et étagée :
-
Comment la commande fonctionne-t-elle soit avec la sortie standard d'une commande, soit avec les fichiers eux-mêmes ?
-
Pourquoi est-il courant de dire
teelit l'entrée standard ? Je veux dire, si je faisls -l,teene lit pas la syntaxels -llui-même mais plutôt le stdout qu'il a imprimé dans la session.
De plus, si vous le souhaitez, veuillez partager un exemple pratique tiré de votre travail quotidien quant au moment où tee vous est très utile ?
Réponse acceptée :
Depuis le tee manuel sur mon système :
L'utilitaire tee copie l'entrée standard vers la sortie standard, créant une copie
dans zéro ou plusieurs fichiers. La sortie n'est pas tamponnée.
Ainsi, il lit à partir de l'entrée standard et le copie sur la sortie standard, et ce faisant, duplique également le flux dans un ou plusieurs fichiers.
Dans le pipeline suivant, tee prendrait la sortie de la première commande dans le pipeline et la copierait sur la sortie standard (le terminal) tout en en faisant des copies dans les fichiers one , two et three :
$ somecommand | tee one two three
tee a de nombreuses utilisations, l'une est en conjonction avec sudo pour rediriger la sortie vers un fichier appartenant à root :
$ somecommand | sudo tee /root/somefile >/dev/null
Ce qui suit ne serait pas ont fonctionné puisque la redirection se produit en tant qu'utilisateur non privilégié (il exécuterait également somecommand en tant que root, ce qui peut être indésirable) :
$ sudo somecommand >/root/somefile
Un exemple artificiel d'ajout d'un ensemble fixe de lignes à plusieurs fichiers à la fois (à tous les utilisateurs ~/.profile fichiers, en supposant que le * s'étend aux noms d'utilisateur et que la ligne de commande étendue ne devienne pas trop longue à gérer pour le shell) :
$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH
Un exemple concret d'utilisation de tee :
time doas box-build.sh 2>&1 | tee build.out | grep '^=*>'
C'est moi qui construis le système de base d'OpenBSD. doas est l'"équivalent" OpenBSD de sudo et box-build.sh est un petit script shell qui fait la construction (essentiellement cd /usr/src && make obj && make build ). J'aimerais stocker la sortie de l'ensemble du processus de construction, y compris les erreurs ou les avertissements, mais je ne veux pas que tout se répande dans mon terminal. À cette fin, j'utilise tee pour tout enregistrer dans build.out puis grep pour seulement avoir une idée de l'endroit où nous en sommes dans le processus dans le terminal.