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
tee
lit l'entrée standard ? Je veux dire, si je faisls -l
,tee
ne lit pas la syntaxels -l
lui-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.