Wenn ich einige Tests ausführe, muss ich eine Reihe von Befehlen ausführen. Es wäre äußerst nützlich für mich und würde mir viel Zeit sparen, wenn es eine Möglichkeit gäbe, all diese Dinge zu tun:
- Führen Sie den Befehl aus, den ich ausführen muss
- Leiten Sie die gesamte Ausgabe des Befehls in eine angegebene Datei um
- Fügen Sie den ursprünglichen Befehl in die angegebene Datei ein
- Drucken Sie die Ausgabe des ursprünglichen Befehls im Terminal
Die Leute haben mir vorgeschlagen, Tee zu verwenden, das sowohl zum Drucken auf dem Terminal als auch zum Senden an eine Datei hervorragend geeignet ist, aber den ursprünglichen Befehl nicht enthält. Am Ende möchte ich eine Datei haben, in der die erste Zeile der Befehl ist, den ich ausgeführt habe, und darunter die Ausgabe des Befehls.
Jemand schlug dies vor:
echo "ls -l" | xargs -I{} bash -c "echo >> output.file; eval {} >> output.file"
Dadurch wird jedoch weder die Ausgabe im Terminal gedruckt noch der ursprüngliche Befehl in die Datei aufgenommen.
Ich würde mich über Ideen freuen.
command-line
Shaneoh
quelle
quelle
tee
.Antworten:
Das
tee
suchen Sie.druckt die Ausgabe von
ls -l
an stdout (dh das Terminal) und speichert sie gleichzeitig in der Dateioutfile
. Aber : Der Befehlsname wird weder in stdout noch in die Datei geschrieben. Um dies zu erreichen, geben Sie einfachecho
den Befehlsnamen ein, bevor Sie den Befehl ausführen, und leiten Sie beide Ausgaben antee
:Die Eingabe ist umständlich. Warum also nicht eine Funktion definieren?
Danach können Sie einfach laufen
um das gewünschte Ergebnis zu erhalten. Fügen Sie die Funktion in Ihr ein
~/.bashrc
, damit sie in jedem neuen Terminal definiert wird.Wenn Sie in der Lage sein möchten, die Ausgabedatei als erstes Argument wie in anzugeben
mach es stattdessen:
Wenn Sie nicht möchten, dass die Ausgabedatei überschrieben, sondern an sie angehängt wird, fügen Sie die
-a
Option hinzutee
.quelle
Sie können den
script
Befehl verwenden, mit dem eine Typoskriptdatei von allem erstellt wird, was auf Ihrem Terminal gedruckt wird. Es erstellt eine gegabelte Muschel und zeichnet alles auf, bis diese Muschel verlassen wird.Wenn ich
cat my_output
dann die gleiche Ausgabe bekomme:quelle
Sie können die Debugging-Funktion der Shell zusammen mit
tee
folgenden Funktionen verwenden :( ... )
Startet eine Sub-Shell, mit der Sie die Ausgabestreams aller in der Sub-Shell ausgeführten Befehle „sammeln“ können. Es enthält auch die Auswirkung des folgendenset
Befehls auf diese Unter-Shell.set -x
Aktiviert diex
Shell-Option, die alle Befehle, die die Shell ausführt, in den Standardfehlerstrom druckt, bevor sie ausgeführt werden.2>&1
leitet Stream 2 (Standardfehler) zu Stream 1 (Standardausgabe) um.|
Leitet den Standardausgabestream des linken Befehls zum Standardeingabestream des rechten Befehls um.tee FILE
kopiert den Standardeingabestream in die DateiFILE
und in die Standardausgabe.Wenn sich Ihre Befehlssequenz bereits in einer Skriptdatei befindet, ist es sinnvoller, sie wie folgt auszuführen:
quelle