Was ist der Zweck von "tee"?

90

Alle Gebräuche, die teeich jemals gesehen habe, waren solche:

 do_something | tee -a logfile

Oder:

do_something_else | tee logfile

Ist teefür diejenigen erfunden, die nicht wissen, dass Sie dasselbe mit Shell-Pipe-Umleitungen tun können? Sowie:

do_something >> logfile

Oder:

do_something_else > logfile

Es ist praktisch dasselbe und es sind weniger Tastaturtreffer erforderlich, um etwas einzugeben. In welchen versteckten Funktionen sehe ich nichts tee?

R Moog
quelle
62
Wie wurde dies nicht in der allerersten Zeile der Manpage "... und schreibe in Standardausgabe und Dateien" beantwortet ? Die Antworten sind interessant, aber wenn man allgemein darüber spricht, wie nützlich Pfeifen sind, wird deutlich, dass dieses Q zu weit gefasst zu sein scheint und möglicherweise hätte geschlossen werden müssen.
Xen2050,
3
@ Xen2050 Eine Frage kann nicht für eine zu breite Antwort verantwortlich gemacht werden. Die Frage ist sehr spezifisch, ebenso wie die derzeit am höchsten bewertete Antwort .
Jon Bentley
1
@ JonBentley die Frage klingt nicht wie "ein spezifisches Problem mit genügend Details, um eine angemessene Antwort zu identifizieren" (wie im Dialogfeld " Schließen" zu lesen ist). Es hört sich so an: "Wenn Ihre Frage von einem ganzen Buch beantwortet werden könnte oder viele gültige Antworten hat (aber keine Möglichkeit festzustellen, welche - wenn überhaupt - richtig sind), dann ist sie wahrscheinlich zu weit gefasst für unser Format." (Quelle: Hilfe )
Xen2050
4
@ Xen2050 Lesen wir die gleiche Frage? Es scheint mir sehr spezifisch zu sein - was ist der Unterschied zwischen Tee und Pfeifen? Es wurde mit zwei Sätzen angemessen beantwortet. Weit entfernt von einem ganzen Buch. Die Tatsache , dass einige Antworten wählen auf einer Tangente zu gehen hat nichts mit dem Umfang der Frage zu tun.
Jon Bentley
@ JonBentley: Lesen wir die gleiche Frage? R Moog impliziert eine ziemlich gut fokussierte Frage: Was ist der Unterschied zwischen tee und der E / A-Umleitung ?   Die Tatsache , dass es sagt , „Schale Rohr Umleitungen wie >und >>“ keinen Punkt zu seinen Gunsten, und ist ein Argument für so unklar schließen. Tatsächlich werden jedoch mehrere Fragen gestellt: "Wozu tee?", "Ist teeerfunden für diejenigen, die nicht wissen, dass Sie dasselbe mit Rohrumleitungen tun können?" Und "In welchen verborgenen Features sehe ich nichts tee?". Mindestens zwei dieser Fragen sind zu weit gefasst.
G-Man,

Antworten:

242

Was Sie nicht sehen, ist, dass do_something | tee -a logfiledie Ausgabe in logfile und auf stdout gestellt wird, während do_something >> logfilesie nur in die Protokolldatei gestellt wird.

Der Zweck von teeist, ein Szenario mit einem Eingang und mehreren Ausgängen zu erzeugen - genau wie bei einer T-Kreuzung.

BEARBEITEN

Es gab Kommentare dazu, wie man teescheinbar weniger Gebrauch machen kann sudo. Dies ist neben dem Punkt: cat, ddoder vielleicht besser bufferbieten diese Möglichkeit mit einer besseren Leistung, wenn Sie die mehrere Ausgänge nicht brauchen. Verwenden Sie teefür das, was es entworfen ist, nicht für das, was es "auch kann"

Eugen Rieck
quelle
37
Mehrfachausgabe ist der Schlüssel. teekann sogar mehrere Argumente annehmen und gleichzeitig in viele Dateien schreiben.
Kamil Maciorowski
20
Ich würde es als Abzweigrohrformstück bezeichnen , nicht als Kreuzung (wie bei einer Straßenkreuzung?).
user20574
7
Wie würde ich catauf unkomplizierte Weise anstelle von teezB verwenden echo /var/work/core.%p | sudo tee /proc/sys/kernel/core_pattern? echo /var/work/core.%p | sudo cat > /proc/sys/kernel/core_patternfunktioniert nicht, da die Weiterleitung von der Nicht-Sudo-Shell verarbeitet wird. Was dd, echo /var/work/core.%p | sudo dd of=/proc/sys/kernel/core_patternfunktioniert, aber ddist oft ein überwältigten Werkzeug, das großen Schaden zu tun, vor allem unter sudo. Wie für buffer, es ist nicht standardmäßig in einem der RedHat- oder Ubuntu-basierten Distributionen installiert, die ich zur Hand haben muss (oder MacOS) ...
Digital Trauma
3
@EugenRieck Ich verstehe, dass die 1: n-Beziehung zwischen in: out die primäre Funktion ist. Allerdings funktionieren in dieser Situation weder die eingebauten catnoch /bin/catdie für mich. Es spielt keine Rolle, woher es catkommt - das >wird immer noch von der Top-Level-Shell (Nicht-Sudo) gehandhabt. Der Vorteil von teeover catin dieser Situation ist, dass die Ausgabedatei als Befehlszeilenparameter (und nicht als Umleitung) übergeben werden kann. ddsicherlich ist ein gangbarer Weg, obwohl ich immer noch bevorzugen würde teefür diesen
Digital - Trauma
3
@EugenRieck Welche Shell hat catund teewie eingebaut? Und welche Version von sudokann Shell-Builtins ausführen?
wjandrea
118

Tee ist nicht nutzlos

Vielleicht wusstest du das trotzdem? Wenn nicht, lesen Sie weiter! Oder wenn Sie wissen, wie es funktioniert, aber nicht sicher sind, warum es existiert, fahren Sie mit dem Ende fort, um zu sehen, wie es zur Unix-Philosophie passt.

Was ist der Zweck von tee?

Im einfachsten Fall werden Daten über die Standardeingabe in die Standardausgabe und in eine (oder mehrere) Dateien geschrieben. Es wurde in der Art, wie es einen Eingang in zwei Ausgänge (und zwei Richtungen) aufteilt, mit einem Klempner-T-Stück verglichen .

Beispiele

Nehmen wir Ihr erstes Beispiel:

do_something | tee -a logfile

Dies übernimmt die Ausgabe von do_somethingund hängt sie an die Protokolldatei an, während sie auch dem Benutzer angezeigt wird. In der Tat hat die Wikipedia-Seitetee dies als zweites Beispiel:

So zeigen Sie die Ausgabe eines Befehls an und hängen sie an eine vorhandene Datei an:

  lint program.c | tee -a program.lint

Dadurch wird die Standardausgabe des Befehls lint program.c auf dem Computer angezeigt und gleichzeitig eine Kopie an das Ende der Datei program.lint angehängt. Wenn die Datei program.lint nicht vorhanden ist, wird sie erstellt.

Das nächste Beispiel hat eine andere Verwendung: Eskalation von Berechtigungen :

So erlauben Sie die Eskalation von Berechtigungen:

cat ~/.ssh/id_rsa.pub | ssh admin@server "sudo tee -a /root/.ssh/authorized_keys2 > /dev/null"

Dieses Beispiel zeigt, wie tee verwendet wird, um eine inhärente Einschränkung des sudoBefehls zu umgehen . sudokann die Standardausgabe nicht in eine Datei leiten. Indem /dev/nullwir den Standard-Out-Stream in entleeren, unterdrücken wir auch die gespiegelte Ausgabe in der Konsole. Der obige Befehl gibt dem aktuellen Benutzer root-Zugriff auf einen Server über ssh, indem der öffentliche Schlüssel des Benutzers in die Schlüsselberechtigungsliste des Servers aufgenommen wird.

Oder möchten Sie die Ausgabe eines Befehls übernehmen, das irgendwo schreiben und das auch als Eingabe für einen anderen Befehl verwenden?

Sie können den Befehl tee auch verwenden, um die Ausgabe eines Befehls in einer Datei zu speichern und dieselbe Ausgabe wie eine Eingabe an einen anderen Befehl umzuleiten.

Der folgende Befehl erstellt eine Sicherungskopie der crontab-Einträge und übergibt die crontab-Einträge als Eingabe an den sed-Befehl, der die Ersetzung vornimmt. Nach der Ersetzung wird es als neuer Cron-Job hinzugefügt.

$ crontab -l | tee crontab-backup.txt | sed 's/old/new/' | crontab –

( Beispiele für die Verwendung von Tee-Befehlen )

Tee arbeitet mit der Unix-Philosophie:

Schreiben Sie Programme, die eines können und es gut machen. Schreiben Sie Programme, um zusammenzuarbeiten. Schreiben Sie Programme, um Textströme zu verarbeiten, da dies eine universelle Schnittstelle ist.

(Verdienst der Grundlagen der Unix-Philosophie )

tee passt zu all diesen:

  • Damit wird eine zusätzliche Kopie der Eingabe erstellt
  • Es funktioniert mit anderen Programmen, da es der Klebstoff (oder ein T-Stück, wenn Sie es vorziehen) ist, mit dem andere Programme wie in den obigen Beispielen zusammenarbeiten können
  • Dies geschieht durch Manipulieren eines bei der Standardeingabe angegebenen Textstroms
bertieb
quelle
3
@Joe: sudo tee -aist wahrscheinlich eine neuere Innovation (ich habe sie zum ersten Mal in Ubuntu-Handbüchern / Wikis gesehen, insbesondere zum Einrichten von Inhalten) /proc/sys, da ich zu Ubuntu gewechselt habe, als ich zu einem sudobasierten System gewechselt habe (wie Ubuntu standardmäßig konfiguriert ist), anstatt es sumit einem zu verwenden root-Passwort). Ich denke schon teevor sudo, es ist also kein Grund für teebestehende. Das brauchen Sie nicht tee, es ist einfach kürzer, interaktiv zu tippen als sudo sh -c 'cat > output'.
Peter Cordes
1
Mit modernen Schalen wie Bash können Sie teezwei Pipelines speisen, wie z foo | tee >(pipe2) | pipe1. Oder ein anderer Spaß ist es ffmpeg ... |& tee /dev/tty | sed 's/.*\r// > encode.log, Statuszeilenaktualisierungen interaktiv auf dem tty zu sehen, während "Zeilen" entfernt werden, die mit Wagenrücklauf anstelle von Zeilenvorschub für die eigentliche Protokollierung enden. (dh die Statuszeilenaktualisierungen herausfiltern). Im Allgemeinen können Sie eine tee /dev/ttybeliebige Stelle in einer Pipeline als Debug-Ausdruck festlegen.
Peter Cordes
2
Es ist weniger eine Beschränkung des Sudo, an dem Sie arbeiten, als vielmehr eine Beschränkung der Interpretation von> durch die Shell. Wenn Sie einen Befehl mit sudo ausführen, wird dessen stdout an Ihr Shell-Programm zurückgesendet, und weitere Weiterleitungen mit> werden mit den Berechtigungen der Shell ausgeführt. Wenn Sie mit erhöhten Berechtigungen schreiben möchten, müssen Sie den erhöhten Teil der Pipeline für das Schreiben festlegen. Es gibt eine Vielzahl von Möglichkeiten, dies zu tun, abhängig davon, welchen Effekt Sie erzielen möchten. Wenn Sie wirklich> etwas wie 'sudo bash -c "command> outfile"' verwenden möchten, erledigt dies.
Perkins
Genau, @Perkins. Die Shell parst die >und richtet die Umleitung ein, bevor sudo überhaupt exec'd bekommt. Es ist also definitiv keine Beschränkung von sudo, dass es nicht mit Dingen umgeht, die es nie sieht. :) Normalerweise versuche ich, dies als "Sudo-Workflow" oder einen ähnlichen Begriff zu bezeichnen, wenn ich es erkläre, anstatt Sudo selbst zu beschreiben.
Dannysauer
sudo tee -aist meiner Meinung nach ein Missbrauch von Tee. Verwendung sudo cat, sudo ddoder (mit der besten Leistung in vielen Fällen) , sudo bufferwenn Sie die mehrere Ausgänge nicht brauchen.
Eugen Rieck
70

Es ist praktisch dasselbe und es sind weniger Tastaturtreffer erforderlich, um etwas einzugeben.

Es ist überhaupt nicht dasselbe ...

Die folgenden scheinen etwas äquivalent zu sein, aber sie sind nicht:

$ echo "hi" > test.txt
$ echo "hi" | tee test.txt
hi

Der entscheidende Unterschied besteht darin, dass der erstere die Daten nur in die genannte Datei geschrieben hat, während der letztere hiin das terminal ( stdout) und die genannte Datei geschrieben hat, wie unten gezeigt:

umleiten vs tee


teeMit dieser Option können Sie die Daten in eine Datei schreiben und in einer weiteren Pipeline verwenden. Auf diese Weise können Sie nützliche Aufgaben ausführen, z.

grep '^look ' interesting_file.txt \
  | tee interesting_lines.txt \
  | sort

Oder Sie können in eine Datei mit erhöhten Rechten schreiben, ohne der gesamten Pipeline erhöhte Rechte zu geben (hier echowird als Benutzer ausgeführt, während teein die Datei geschrieben wird als root):

echo 0 \
  | sudo tee /proc/sys/net/ipv4/ip_forward

Mit teekönnen Sie in viele Dateien ( und stdout ) schreiben :

echo "hi" \
  | tee a.txt b.txt

Es ist auch möglich, execmit teedie gesamte Ausgabe eines Skripts in einer Datei aufzuzeichnen, während ein Beobachter ( stdout) weiterhin die Daten sehen kann:

exec > >( tee output.log )
Attie
quelle
2
Nicht zu vergessen exec > >(tee "$LOGFILE") 2>&1in einem Bash-Skript, bei dem das Skript stdout und stderr sowohl an stdout als auch an die Datei ausgibt, auf die von verwiesen wird $LOGFILE.
rexkogitans
@rexkogitans 2> & 1 ist das nicht cmd batch syntax?
dmb
@dmb: Es ist die Shell-Syntax für "send stderr (= 2) to the same place to stdout (= 1)"
psmears
@rexkogitans Es war wirklich eine faire Frage, ich kann nicht wirklich wissen, dass Sie "Windoze" seit einem Jahrzehnt nicht mehr verwendet haben. Ich verwende 2>&1, um Ausgabe und Fehler zu txt-Dateien in Windows fallen zu lassen.
dmb
1
@dmb Es tut mir leid, dass ich so unhöflich klinge. Alles dreht sich um den Kommentar von psmears. Offensichtlich hat Windows hier den Unix-Stil übernommen.
rexkogitans
27

Das ist ein Tee:
Bildbeschreibung hier eingeben

Eine T-förmige Rohrverschraubung. Es hat einen Einlass und zwei separate Auslässe.
Mit anderen Worten, es teilt eine Pfeife in zwei; wie eine Weggabelung.

Ebenso teeist eine Pipe ( |), mit der Sie Ihre Standardeingabe auf zwei separate Ausgaben umleiten können.


Beispiel
Angenommen, Sie geben beispielsweise Folgendes ein ls /.
Sie erhalten eine Ausgabe, die ungefähr so ​​aussieht:

Applications    Network     Users       bin        dev      net      private    tmp         var
Library         System      Volumes     cores      etc      home     opt        sbin        usr

Leiten Sie die Ausgabe in eine Textdatei um, ls / > ls.txtund in der Shell wird nur in der resultierenden Textdatei keine Ausgabe angezeigt.

Möchten Sie die Ausgabe anzeigen UND gleichzeitig an eine Textdatei übergeben?
Füge a teezu deiner Pipe hinzu ( |) dh:ls / | tee ls.txt


Vergleichen Sie die beiden:

ls /          >          ls.txt
ls /        | tee        ls.txt
Stimmen
quelle
4
+1 für ein Bild, das
bekanntlich mehr
Wenn Sie ein Gartenschlauch-T-Stück ausgewählt hätten, wären Sie mit der ursprünglichen Metapher von Doug McIlroy in Einklang gewesen.
JdeBP
@JdeBP Sorry, ich habe keine Ahnung, wer das ist. Ist er der ursprüngliche Autor des Dienstprogramms oder so? Der Datenfluss und der physikalische Strom werden oft mit Hydrauliksystemen verglichen, aber das wissen Sie wahrscheinlich. Wie auch immer, ich habe diesen Stil gewählt, um ihn super einfach zu halten. Eigentlich wollte ich das tun, um es vertraut zu machen, aber die Gartensorte hat eher eine Y-Form und / oder optisch komplizierte Aufsätze zum Anbringen von Zubehör usw. Es ist im Wesentlichen dasselbe.
Stimmen
18

Nein. Sie erwähnen zufällig eines der wenigen Beispiele, in denen Sie mithilfe von >und >>-Operatoren in die Datei umleiten können.

Aber Tee kann noch viel mehr. Da Sie eine Pipe zu ihm erstellen, können Sie eine Pipe zu etwas anderem erstellen.

Ein gutes Beispiel finden Sie auf der Wikipedia-Seite :

find "4DOS" wikipedia.txt | tee 4DOS.txt | sort > 4DOSsorted.txt

Grundsätzlich können Sie eine Pipe an Tee senden, sodass Sie dann eine Pipe von Tee an etwas anderes senden können. Wenn Sie nur eine Protokolldatei schreiben möchten, brauchen Sie Tee nicht wirklich.

LPChip
quelle
17

teeist alles andere als nutzlos. Ich benutze es die ganze Zeit und bin froh, dass es existiert. Es ist ein sehr nützliches Tool, wenn Sie eine Pipeline haben, die Sie aufteilen möchten. Ein sehr einfaches Beispiel ist, dass Sie ein Verzeichnis haben $d, das Sie tarieren möchten, und dass Sie es auch hashen möchten, weil Sie paranoid sind (wie ich) und dem Speichermedium nicht vertrauen, um die Daten zuverlässig zu halten. Sie könnten es zuerst auf die Festplatte schreiben und dann hashen, aber das würde fehlschlagen, wenn das Archiv beschädigt wird, bevor es hasht. Außerdem müssten Sie es lesen, und wenn Sie mit Dateien arbeiten, die mehrere hundert GB groß sind, werden Sie wissen, dass Sie sie wirklich nicht noch einmal lesen möchten, wenn dies nicht der Fall sein muss.

Also, was ich tue, ist einfach das:

tar -c "$d" | tee >(sha256sum) >(cat > "$d"".tar") > /dev/null

Es erzeugt den Teerball und leitet ihn zum Tee, der ihn dann zu zwei Unterschalen leitet, von denen eine gehasht und die andere auf die Platte geschrieben ist.

Es ist auch großartig, wenn Sie mehrere Operationen an einer großen Datei ausführen möchten:

< file.tar.gz tee >(sha256sum) >(tar -xz) /other/storage/location/file.tar.gz > /dev/null

Liest die Datei einmal, hasht sie (damit Sie prüfen können, ob sie noch so ist, wie sie sein sollte), extrahiert sie und kopiert sie an einen anderen Speicherort. Es ist nicht nötig, es dreimal zu lesen.

UTF-8
quelle
3
Nitpick: erstellt teekeine Subshells; die Aufruf - Shell läuft sha5sumund catverbindet ihren Ausgang Deskriptoren Datei, die übergeben werden tee. Auch eine nutzlose Verwendung von cat; Sie können die Eingabeumleitung verwenden, teeum direkt von zu lesen file.tar.gz.
Chepner
@chepner Du hast Recht mit der ersten Interjektion, aber völlig unrecht mit der zweiten. Ich schreibe meine Pipelines gerne in der richtigen Reihenfolge, daher ist es für die Lesbarkeit furchtbar, die Eingabe rechts zu bezeichnen, und dies ist meiner Methode eindeutig objektiv unterlegen und absolut keine subjektive Präferenz von mir. catist Liebe. catist Leben.
UTF-8,
6
Sie können auch schreiben, < file.tar.gz tee >(sha256sum) ...wenn Sie Bedenken hinsichtlich der lexikalischen Reihenfolge der Weiterleitungen haben. Das ändert nichts an der Tatsache, dass kein völlig separater Prozess erforderlich ist, um nur eine einzelne Datei zu füttern tee.
Chepner
1
@chepner Cool, danke! Heute etwas gelernt. :)
UTF-8
1
Die Kosten für die Ausgangs cat ist relativ gering. Die Kosten für zusätzliche 100 GiB Write + Read-Systemaufrufe verschwenden definitiv zusätzliche CPU-Zeit und Speicherbandbreite für das vorgeschlagene Beispiel einer großen Datei. Denken Sie daran, dass die Speicherbandbreite eine gemeinsame Ressource für alle Kerne ist, ganz zu schweigen von der zusätzlichen Belastung des L3-Cache durch das Kopieren. Auf einem x86 mit aktivierter Spectre + Meltdown-Abschwächung sind Systemanrufe teurer als früher. Sie verbrauchen im Verlauf dieser Kopie eine messbare Menge an zusätzlicher CPU-Zeit. Auch >(cat > foo)ist nicht einfacher zu verstehen als foo, IMO.
Peter Cordes
12

Nitpick on @ bertiebs Antwort lautet: Dieses Beispiel zeigt, wie tee verwendet wird, um eine inhärente Einschränkung des Befehls sudo zu umgehen. sudo kann die Standardausgabe nicht in eine Datei umleiten.

Es gibt keine inhärente Einschränkung, nur ein Missverständnis darüber, wie der Befehl verarbeitet wird.

Beispiel:

sudo echo 0 > /proc/sys/net/ipv4/ip_forward

Die aktuelle Shell analysiert die Befehlszeile. Es findet die Ausgabeumleitung und führt diese aus. Dann führt es den Befehl aus, der sudodie verbleibende Befehlszeile als Argumente für den ausgeführten Befehl enthält. Wenn die aktuelle Shell keine Root-Berechtigungen hat, schlägt die Ausgabeumleitung fehl.

echo 0 | sudo tee /proc/sys/net/ipv4/ip_forward

Dies funktioniert, weil die Ausgabeumleitung auf den teeBefehl verschoben wird , der zu diesem Zeitpunkt über Root-Berechtigungen verfügt, da er über ausgeführt wurde sudo.

sudo bash -c "echo 0 > /proc/sys/net/ipv4/ip_forward"

Dies funktioniert, weil die Shell, die die Umleitung durchführt, über Root-Berechtigungen verfügt.

Studog
quelle
2
Außerdem benötigen Sie möglicherweise sudofür den Befehl, aber nicht für die Datei, die ausgegeben wird, und die Umleitung funktioniert einwandfrei:sudo foo-needs-privilege > /tmp/this-output-file-doesnt
Dennis Williamson
10

Wie bereits erwähnt, teeschreibt die Weiterleitung der Ausgabe an den Befehl diese Ausgabe sowohl in eine Datei als auch in stdout.

Ich verwende diese teeOption häufig, wenn ich die Ausgabe eines Befehls erfassen möchte, dessen Ausführung lange dauert, und gleichzeitig die Ausgabe visuell überprüfen möchte, wenn der Befehl sie zur Verfügung stellt. Auf diese Weise muss ich nicht warten, bis der Befehl beendet ist, bevor ich die Ausgabe überprüfe.

Was noch nicht erwähnt worden zu sein scheint (es sei denn, ich habe es übersehen), ist, dass der teeBefehl auch in mehrere Dateien gleichzeitig schreiben kann. Zum Beispiel:

ls *.png | tee a.txt b.txt

schreibt alle *.pngDateien im aktuellen Verzeichnis auf einmal in zwei verschiedene Dateien ( a.txtund b.txt).

Tatsächlich können Sie wie folgt Text in mehrere verschiedene Dateien gleichzeitig teeeingeben:

$ tee --append a.txt b.txt c.txt d.txt
These lines are appended to four different files,
and are also written to stdout.
CTRL-D
J L
quelle
9

Die häufigste Verwendung von tee besteht darin, den Text auf dem Terminal zu sehen, wenn Sie ihn an die Datei (oder die Dateien) senden. Der Wortlaut Ihrer Frage geht davon aus, dass Sie nur Text in Protokolldateien schreiben. Ich habe Skripte, die Listen von Dateinamen oder Verzeichnisnamen schreiben, um Dateien auszulösen (die von anderen Skripten asynchron verarbeitet werden), und ich benutze tee, um den gleichen Inhalt an stdout zu senden. Alle Standardausgaben werden an die Protokolle gesendet. Also habe ich meinen Text dort, wo ich ihn haben möchte, und ich habe einen Protokolleintrag, der aufzeichnet, dass ich dies getan habe, alles aus einer einzigen "Echo" -Anweisung

tee ist auch die beste Methode in Unix, um mehrere identische Dateien zu erstellen. Ich benutze es gelegentlich, um mehrere leere Dateien zu erstellen, so ...

:|tee file01 file02 file03
Wil Young
quelle
5
warum nicht touch? (was passiert, ist sofort klarer)
Attie
@Attie schneidet touchDateien nicht ab, wenn sie bereits vorhanden sind, sondern aktualisiert nur ihre Zeitstempel und lässt ihren Inhalt unverändert . aber teewird sie abschneiden. Auch rm+ touchist etwas anderes als tee(denken Sie an Hardlinks und Symlinks)
Matija Nalis
Warum dann nicht truncate -s 0? :-)
Attie
1

Stellen Sie sich vor, Sie möchten die Ausgabe eines Befehls in eine Protokolldatei schreiben UND auf stdout drucken. Wenn Sie es zur gleichen Zeit tun müssen, dann brauchen Sie tee.

Ein Anwendungsfall ist es, Build-Skripte zu haben, die den gesamten Build auf stdout schreiben (z. B. für Jenkins), aber wichtige Dinge gleichzeitig in eine separate Protokolldatei (für zusammenfassende E-Mails).

Sie werden wirklich vermisst, teewenn Sie ein Skript in Windows ausführen müssen. Es gibt keine teeund das ist echt nervig.

domih
quelle
Ist es nicht trivial zu schaffen?
Leichtigkeitsrennen im Orbit
Bei batch / cmd ist dies nicht möglich, da Sie einen Ausgabestream eines Befehls nicht einfach aufteilen können.
12.
Richtig, aber wie ein dreizeiliges C ++ - Programm ...
Lightness Races in Orbit
1
Die Unxutils-Distribution von Windows verfügt über viele Unix-Befehlszeilentools, die im Gegensatz zu einigen Distributionen die Windows-Ausführungsumgebung nicht beeinträchtigen. Die größte Einschränkung betrifft "Glob" -Bing, das unter Unix / Linux anders funktioniert als unter Windows. "tee" gehört zu den verfügbaren Tools.
cmm
2
Seien Sie nicht albern, es ist 2018. Verwenden Sie Powershell, es hat tee. Cmd war nie für ernsthaftes Scripting gedacht - dafür war VBS da. Powershell ist das neue Tool zum Erstellen von Skripten. Zugegeben, Cmd ist immer noch ziemlich mächtig, aber die Kommandozeilen-Tools sind ziemlich wenige.
Luaan