Ich möchte die Ausgabe von Portage-Befehlen und anderen Befehlen, die ich in tty ausführe (das sind die bildschirmbreiten Terminals, die mit Ctrl+ Alt+ gestartet werden , wobei n eine Ganzzahl zwischen 1 und 6 darstellt. Diese Terminals werden meines Wissens mit dem Befehl gestartet), wo es keine Zwischenablage gibt, in eine Textdatei schreiben können. Jetzt lese ich auf derFngetty
Ubuntu-Forendass der Unix-Befehl cat
dies vielleicht kann, wenn er richtig verwendet wird. Leider scheint das Befolgen des dort vorgeschlagenen Befehls nicht die vollständige Ausgabe des emerge
Befehls in eine Textdatei zu schreiben. Ich habe Folgendes ausgeführt:
emerge dev-qt/qtwayland > cat >> /home/fusion809/output.txt
wobei fusion809 mein Benutzername ist, und es wurden nur vier Ausgabezeilen in output.txt geschrieben, nämlich:
Calculating dependencies ....... .. ....... done!
[ebuild R ] media-libs/mesa-11.0.4 USE="-wayland*" ABI_X86="32*"
[ebuild R ] dev-qt/qtgui-5.5.1 USE="-egl* -evdev* -ibus*"
[ebuild R ] dev-qt/qtwayland-5.5.1 USE="-egl*"
Ich habe auch versucht:
emerge dev-qt/qtwayland > /home/fusion809/output.txt
Und:
emerge dev-qt/qtwayland >> /home/fusion809/output.txt
beide haben die gleiche Ausgabe in output.txt geschrieben.
Antwort1
Sie sind auf dem richtigen Weg. Unter Unix/Linux gibt es auch einen Fehlerstrom. Jeder Befehl erhält Standardeingabe, Standardausgabe und Standardfehler.
Sie haben mit der Standardausgabe gearbeitet. Um auch den Standardfehlerstrom des Befehls zu erfassen, verwenden Sie 2>
. Beispiel:
emerge dev-qt/qtwayland > emerge.out 2> emerge.err
Wenn Sie nun die Standardausgabe wünschenUndFehler beim Eintreten in dieDasselbeDatei, verwenden Sie 2>&1
diese, um der Shell mitzuteilen, dass die Standardfehlerausgabe an denselben Ort gesendet werden soll wie die Standardausgabe:
emerge dev-qt/qtwayland > emerge.out 2>&1
Wenn Sie weitere Referenzen benötigen und mehr erfahren möchten, können Sie jederzeit auf der Manpage der Shell nachschauen man sh
.
Danke für die informative und gut durchdachte Frage!
Antwort2
Sie brauchen das dort nicht
> cat
. Tatsächlich wird dadurch nur eine weitere Datei mit dem Namencat
im aktuellen Verzeichnis erstellt. Und wenn Sie eigentlich eingeben wollten| cat
, ist das überflüssig, da Sie die Ausgabe umleiten können, ohne sie durch cat zu leiten.emerge dev-qt/qtwayland > /home/fusion809/output.txt
wird sparenALLEder Standardausgabe Ihresemerge
Befehls in/home/fusion809/output.txt
... ALLES. Wenn die Datei nur 4 Zeilen enthält, liegt das daran, dassemerge
nur 4 Zeilen in die Standardausgabe gedruckt wurden.emerge hat möglicherweise mehr Material in ausgegeben
stderr
. Wenn Sie das auch erfassen möchten, versuchen Sie es mitemerge dev-qt/qtwayland >& /home/fusion809/output.txt
. Dadurch werden sowohl stdout als auch stderr in dieselbe Datei umgeleitet.der Unterschied zwischen
>
und>>
besteht darin, dass>
die Datei vor dem Erstellen gelöscht wird, falls sie vorhanden ist, und>>
an die Datei angehängt wird, falls sie bereits vorhanden ist, bzw. sie erstellt wird, falls dies nicht der Fall ist (abhängig von den Shell-Optionen).wenn Sie die Ausgabe in einer Datei speichern möchtenUNDgleichzeitig auf dem Bildschirm sehen möchten, verwenden Sie
tee
. Beispiel:
emerge dev-qt/qtwayland |& tee -a /home/fusion809/output.txt
tee
Die Option von -a
weist darauf hin, dass angehängt werden soll, anstatt zu löschen und zu überschreiben.