Wie speichere ich die Ausgabe eines Befehls in einer Datei?
Gibt es einen Weg ohne Software? Ich würde gerne wissen wie.
command-line
LED-Zepp
quelle
quelle
someCommand 2> someFile.txt
undsomeCommand 2>> someFile.txt
leitet auchstterr
zu someFile.txtmake
Befehls in eine Datei zu bekommen, muss stattdessen diese Syntax verwendet werden:make > someFile.txt 2>&1
(Quelle: linuxquestions.org/questions/linux-newbie-8/… )Um die Ausgabe eines Befehls in eine Datei zu schreiben, gibt es grundsätzlich 10 häufig verwendete Methoden.
Überblick:
Liste:
command > output.txt
Der Standardausgabestream wird nur in die Datei umgeleitet und ist im Terminal nicht sichtbar. Wenn die Datei bereits existiert, wird sie überschrieben.
command >> output.txt
Der Standardausgabestream wird nur in die Datei umgeleitet und ist im Terminal nicht sichtbar. Wenn die Datei bereits vorhanden ist, werden die neuen Daten an das Ende der Datei angehängt.
command 2> output.txt
Der Standardfehlerstrom wird nur in die Datei umgeleitet, er ist im Terminal nicht sichtbar. Wenn die Datei bereits existiert, wird sie überschrieben.
command 2>> output.txt
Der Standardfehlerstrom wird nur in die Datei umgeleitet, er ist im Terminal nicht sichtbar. Wenn die Datei bereits vorhanden ist, werden die neuen Daten an das Ende der Datei angehängt.
command &> output.txt
Sowohl die Standardausgabe als auch der Standardfehlerstrom werden nur in die Datei umgeleitet. Im Terminal ist nichts sichtbar. Wenn die Datei bereits existiert, wird sie überschrieben.
command &>> output.txt
Sowohl die Standardausgabe als auch der Standardfehlerstrom werden nur in die Datei umgeleitet. Im Terminal ist nichts sichtbar. Wenn die Datei bereits existiert, werden die neuen Daten an das Ende der Datei angehängt.
command | tee output.txt
Der Standardausgabestream wird in die Datei kopiert und ist im Terminal weiterhin sichtbar. Wenn die Datei bereits existiert, wird sie überschrieben.
command | tee -a output.txt
Der Standardausgabestream wird in die Datei kopiert und ist im Terminal weiterhin sichtbar. Wenn die Datei bereits vorhanden ist, werden die neuen Daten an das Ende der Datei angehängt.
(*)
Bash hat keine Kurzschrift-Syntax, die es erlaubt, nur StdErr an einen zweiten Befehl weiterzuleiten, der hier in Kombination mit
tee
again zur Vervollständigung der Tabelle benötigt würde. Wenn Sie so etwas wirklich brauchen, schauen Sie bitte unter "So leiten Sie stderr und nicht stdout?" on Stack Overflow für einige Möglichkeiten, wie dies getan werden kann, z. B. durch Austauschen von Streams oder durch Ersetzen von Prozessen.command |& tee output.txt
Sowohl die Standardausgabe als auch die Standardfehlerströme werden in die Datei kopiert, während sie im Terminal weiterhin sichtbar sind. Wenn die Datei bereits existiert, wird sie überschrieben.
command |& tee -a output.txt
Sowohl die Standardausgabe als auch die Standardfehlerströme werden in die Datei kopiert, während sie im Terminal weiterhin sichtbar sind. Wenn die Datei bereits vorhanden ist, werden die neuen Daten an das Ende der Datei angehängt.
quelle
2>&1
Leitet STDERR zu STDOUT um,1>&2
leitet STDOUT zu STDERR um und3>&1
leitet Stream 3 zu STDERR um.sh: 1: Syntax error: "&" unexpected
wenn ich|& tee
ein Python-Skript auf einem c9.io-Server verwende. Es scheint, dass eine andere Shell verwendet wird.echo $SHELL
zeigt/bin/bash
und$SHELL --version
zeigt Version 4.3.11 (1) -Release. Ich habe es#!/bin/bash
in meinem Python-Skript versucht, aber ich verstehe immer nochsh: 1: Syntax error
. Ich habe das, was ich brauchte, also gebe ich es auf, die Verrücktheit zwischensh
undbash
auf meinem Server zu sortieren . Vielen Dank.sh
und nichtbash
(oder vielleichtbash
imsh
Modus ...). Sie können überprüfen, was genau Ihr aktueller Shell-Prozess verwendetps -p $$ -o cmd=
, da erecho $SHELL
unzuverlässig ist und Ihnen Ihre Anmeldeshell anzeigt. Dabei können Sie ignorieren, ob Sie möglicherweise eine andere Subshell gestartet haben.Sie können auch verwenden
tee
, um die Ausgabe an eine Datei zu senden:Eine kleine Modifikation wird auch stderr einfangen:
oder etwas kürzer und weniger kompliziert:
tee
Dies ist nützlich, wenn Sie die Befehlsausgabe erfassen und gleichzeitig live anzeigen möchten .quelle
2>&1
?Sie können die Befehlsausgabe in eine Datei umleiten:
Verwenden Sie Folgendes, um die Befehlsausgabe an eine Datei anzuhängen, anstatt sie zu überschreiben:
quelle
Eine zu berücksichtigende Verbesserung -
Verschiedene Skripte fügen Farbcodes in die Ausgabe ein, damit Ihre Protokolldatei nicht überladen wird.
Um dies zu beheben, können Sie das Programm sed verwenden , um diese Codes zu entfernen. Beispiel:
quelle
ls
und , diese nur danngrep
unterstützen--color=auto
, wenn es sich bei der Standardausgabe um ein Terminal handelt.Für
cron
Jobs usw. möchten Sie die Bash-Erweiterungen vermeiden. Die entsprechenden POSIX-sh
Umleitungsoperatoren sindSie werden feststellen, dass die POSIX-Funktion in gewisser Weise einfacher und unkomplizierter ist. Die
&>
Syntax wurde entlehnt,csh
was Sie bereits davon überzeugen sollte, dass es eine schlechte Idee ist.quelle
some_command | tee command.log
undsome_command > command.log
haben das Problem, dass sie die Befehlsausgabe nichtcommand.log
in Echtzeit in der Datei speichern.Um dieses Problem zu vermeiden und die Befehlsausgabe in Echtzeit zu speichern, können Sie
unbuffer
dasexpect
Paket anhängen .Beispiel:
Angenommen,
log.py
enthält:du kannst rennen
unbuffer python log.py | tee command.log
oderunbuffer python log.py > command.log
Weitere Informationen: Wie kann ich eine Befehlsausgabe in Echtzeit in einer Datei speichern?
quelle