Antworten:
benutze den script
Befehl. Es kopiert alles, was in einer Datei angezeigt wird
script -c "sudo apt-get install things" script-file.script
script
Sendet die Befehlsausgabe an eine Datei, zeigt sie jedoch nicht auf dem Bildschirm an.
script -c "history" ~/hist.txt
und sah die Ausgabe, die Script started
und anzeigt Script done
, aber ich sah nicht die Ausgabe des tatsächlichen Befehls auf dem Bildschirm.
history
ist eine eingebaute Shell, kein externer Befehl. Was passiert ist: 1) Skript startet, 2) Skript durchsucht den Verlaufsbefehl, findet ihn nicht, daher wird vermutet, dass es dies über eine Shell ausführen sollte. 3) Das Skript führt den Befehl history
über eine Shell aus. 4) Eine neue Shell wird gestartet und führt den internen Verlaufsbefehl aus. Da dies eine neue nicht interaktive Shell ist, hat die Geschichte nichts zu sagen.
script
kann auch interaktiv ausgeführt werden. Geben Sie einfach script
an der Eingabeaufforderung ein. Sie erhalten eine neue Shell und bei jedem Befehl, den Sie eingeben, wird die Ausgabe gespeichert. Geben Sie ein exit
, um die Shell zu beenden und die Datei zu speichern. Standardmäßig wird die Ausgabe aufgerufen typescript
und enthält alles, was auf Ihrem Bildschirm angezeigt wird, unabhängig davon, ob Sie es eingegeben haben oder ob es sich um die Ausgabe eines Befehls handelte. Der history
Befehl sollte auch in der neuen Shell noch verfügbar sein.
Sie können den tee
Befehl verwenden, um dies zu erreichen.
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
Schau hier für mehr Infos , oder führe ausman tee
Hinweis: Wie bereits erwähnt, 2>&1
muss STDERR nach STDOUT umgeleitet werden, um Fehler abzufangen. In dieser StackOverflow-Frage finden Sie eine gute Erklärung der 2>&1
tatsächlichen Funktionsweise.
script
da der Befehl nicht in Anführungszeichen gesetzt werden muss. So lassen sich Vorteile wie die Bash-Vervollständigung leichter erzielen.
-c "something ..."
: if nicht, dann werden Sie auf eine Shell umgeleitet und beendet, wenn Sie diese Shell beenden . Ermöglicht mehrere Befehle usw. Außerdem bleiben mehr "Formatierungs" -Infos erhalten, wodurch einige weitere Dinge (wie: Bildschirm löschen usw.) wiedergegeben werden können (dies kann jedoch auch die Ausgabe durcheinander bringen ... ymmv)
|&
anstelle von 2>&1 |
in Bash
tee
erledigt die Arbeit nach Bedarf.
Verwenden Sie zum Erfassen der Ausgabe in eine Datei Folgendes:
sudo apt-get install your_software | tee log_file.txt
Dadurch wird nur die Ausgabe erfasst, jedoch keine Fehlermeldung. Wenn Sie auch Fehlermeldungen aufzeichnen möchten, ändern Sie den Befehl wie folgt:
sudo apt-get install your_software 2>&1 | tee log_file.txt
bash
der |&
Operator dies unterstützt , sudo apt-get install your_software |& tee log_file.txt
sowohl stdout als auch stderr an tee
. (Ein großes Lob an JF Sebastian, der dies an anderer Stelle vorgeschlagen hat .)
Das Schöne an apt-get (und APT im Allgemeinen) ist, dass sie Protokolldateien für fast alles speichern, selbst für die Terminalausgabe aller Befehle, die Sie in der Anwendung ausführen /var/log/apt
. Dies ist zum Beispiel der letzte Eintrag in meinem /var/log/apt/term.log
:
Log started: 2014-06-20 16:46:08
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Log ended: 2014-06-20 16:46:33
Nun zum Vergleich mit der tatsächlichen Ausgabe:
➜ ~ sudo apt-get remove xdotool
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libxdo3
Use 'apt-get autoremove' to remove it.
The following packages will be REMOVED:
xdotool
0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
After this operation, 135 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Es hat mir mehrere Zeilen erspart, die in den meisten Fällen nicht relevant sind, und das geschieht automatisch. Sie benötigen also keinen zusätzlichen Befehl, um das zu tun, was Sie tun möchten. Apt-get erledigt dies für Sie.
apt-get
richtig?