GNU/Linux >> Tutoriels Linux >  >> Linux

Comment fonctionne la commande Tee ? ?

Fermé . Cette question a besoin de détails ou de clarté. Il n'accepte pas de réponses actuellement.

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 :

  1. Comment la commande fonctionne-t-elle soit avec la sortie standard d'une commande, soit avec les fichiers eux-mêmes ?

  2. Pourquoi est-il courant de dire tee lit l'entrée standard ? Je veux dire, si je fais ls -l , tee ne lit pas la syntaxe ls -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.

En relation :Script Shell avec fonction et paramètre en tant que variables ?
Linux
  1. Comment utiliser la commande Linux grep

  2. Comment utiliser la commande history sous Linux

  3. Fonctionnement de la commande oc debug dans OpenShift

  4. Comment utiliser la commande basename ?

  5. Comment fonctionne le Sticky Bit ?

Comment utiliser la commande Linux xargs

Comment utiliser la commande Linux tee

Comment utiliser la commande top sous Linux

Comment utiliser la commande Linux Ping

Comment utiliser la commande nmap

Comment personnaliser la commande Linux top