GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie funktioniert der Tee-Befehl?

Geschlossen . Diese Frage braucht Details oder Klarheit. Antworten werden derzeit nicht akzeptiert.

Möchten Sie diese Frage verbessern? Fügen Sie Details hinzu und klären Sie das Problem, indem Sie diesen Beitrag bearbeiten.

Vor 4 Jahren geschlossen.


Verbessern Sie diese Frage

Nachdem Sie auf etwa 3 tee gestoßen sind Erklärungen, die ich für undidaktisch halte, würde ich um eine einfache, allgemeine und (wenn möglich) abgestufte Erklärung zu diesem Befehl bitten, die sich an Linux-Neulinge richtet.

Ich verstehe, dass wir es entweder über eine Pipe, auf der Standardausgabe eines Befehls oder alternativ direkt in einer bestimmten Datei verwenden, aber ich glaube, ich vermisse, was der Befehl tatsächlich mit diesem Inhalt macht und wann er nützlich ist.

Hier ist also meine Frage, in der Hoffnung, eine didaktische Erklärung zu finden, die Neulingen in einer klaren, abgestuften Weise serviert wird:

  1. Wie funktioniert der Befehl entweder mit der Standardausgabe eines Befehls oder alternativ mit den Dateien selbst?

  2. Warum ist es üblich, tee zu sagen liest die Standardeingabe? Ich meine, wenn ich ls -l mache , tee liest die Syntax ls -l nicht selbst, sondern die stdout, die sie in die Sitzung ausgegeben hat.

Wenn Sie möchten, teilen Sie bitte auch ein praktisches Beispiel aus Ihrer täglichen Arbeit mit, wann tee ist sehr nützlich für Sie?

Akzeptierte Antwort:

Vom tee Handbuch auf meinem System:

Das Dienstprogramm tee kopiert die Standardeingabe in die Standardausgabe und erstellt eine Kopie
in null oder mehr Dateien. Die Ausgabe erfolgt ungepuffert.

Es liest also von der Standardeingabe und kopiert sie zur Standardausgabe und dupliziert dabei auch den Stream in eine oder mehrere Dateien.

In der folgenden Pipeline tee würde die Ausgabe des ersten Befehls in der Pipeline nehmen und sie zur Standardausgabe (dem Terminal) kopieren, während sie auch Kopien davon in den Dateien one erstellt , two und three :

$ somecommand | tee one two three

tee hat viele Verwendungen, eine ist in Verbindung mit sudo um die Ausgabe in eine Datei umzuleiten, die root gehört:

$ somecommand | sudo tee /root/somefile >/dev/null

Das Folgende würde nicht hat funktioniert, da die Umleitung als nicht privilegierter Benutzer erfolgt (es würde auch somecommand ausführen als root, was unerwünscht sein kann):

$ sudo somecommand >/root/somefile

Ein künstliches Beispiel für das Anhängen eines festen Zeilensatzes an viele Dateien auf einmal (an alle Benutzer ~/.profile Dateien, vorausgesetzt, dass der * auf die Benutzernamen erweitert wird und dass die erweiterte Befehlszeile nicht zu lang für die Shell wird):

$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH

Ein echtes Beispiel für die Verwendung von tee :

time doas box-build.sh 2>&1 | tee build.out |  grep '^=*>'

Das bin ich, der das OpenBSD-Basissystem aufbaut. doas ist das OpenBSD-„Äquivalent“ von sudo und box-build.sh ist ein kleines Shell-Skript, das das Erstellen übernimmt (im Wesentlichen cd /usr/src && make obj && make build ). Ich möchte die Ausgabe des gesamten Build-Prozesses speichern, einschließlich aller Fehler oder Warnungen, aber ich möchte nicht, dass alles in mein Terminal ausspuckt. Dazu verwende ich tee um alles in build.out zu speichern und dann grep um nur einen Hinweis darauf zu bekommen, wo wir uns gerade im Terminal befinden.

Verwandte:Shell-Skript mit Funktion und Parameter als Variablen?
Linux
  1. Funktionsweise des Befehls oc debug in OpenShift

  2. Wie verwende ich den basename-Befehl?

  3. Wie funktioniert der Exit-Befehl auf einem Unix-Terminal?

  4. Wie wird der Platzhalter * als Befehl interpretiert?

  5. Wie funktioniert der Befehl „ls“ unter Linux/Unix?

So verwenden Sie den Linux-xargs-Befehl

So verwenden Sie den Linux-te-Befehl

So verwenden Sie den obersten Befehl unter Linux

So verwenden Sie den Linux-Ping-Befehl

So verwenden Sie den nmap-Befehl

So passen Sie den Linux-Befehl top an