Antworten:
benutze den scriptBefehl. Es kopiert alles, was in einer Datei angezeigt wird
script -c "sudo apt-get install things" script-file.script
scriptSendet die Befehlsausgabe an eine Datei, zeigt sie jedoch nicht auf dem Bildschirm an.
script -c "history" ~/hist.txtund sah die Ausgabe, die Script startedund anzeigt Script done, aber ich sah nicht die Ausgabe des tatsächlichen Befehls auf dem Bildschirm.
historyist 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.
scriptkann auch interaktiv ausgeführt werden. Geben Sie einfach scriptan 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 typescriptund 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 historyBefehl sollte auch in der neuen Shell noch verfügbar sein.
Sie können den teeBefehl 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>&1muss STDERR nach STDOUT umgeleitet werden, um Fehler abzufangen. In dieser StackOverflow-Frage finden Sie eine gute Erklärung der 2>&1tatsächlichen Funktionsweise.
scriptda 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.txtsowohl 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-getrichtig?