Gibt es eine einfache Möglichkeit, alle Aktivitäten eines Shell-Skripts in einer Datei zu protokollieren?
Ich habe ein Drehbuch. Es gibt Dinge wie Echo "Anweisungen" sowie andere Programmausgaben aus. Ich kenne die Befehle:
command | tee -a "$log_file"
und
command >> logifle.log
Was ich frage, ist, ob es einen Shell-Parameter für die Protokollierung oder einen Set-Befehl gibt, den ich verwenden kann, oder so ähnlich. Ich möchte nicht unbedingt Dutzende von Weiterleitungen oder Abschlägen zu Dateien hinzufügen, wenn ich das nicht muss. Ich möchte dennoch eine Standardausgabe erhalten - ich möchte nur, dass sie protokolliert wird.:wq
Antworten:
Wenn Sie Ihr Skript normalerweise mit ausführen
foo.sh
, versuchen Sie, es mit auszuführen (vorausgesetzt, es ist ein Bash-Skript)bash -x foo.sh
. Wenn Sie möchten, dass alles in eine Datei umgeleitet wird, versuchen Sie esbash -x foo.sh > file.log 2>&1
(beachten Sie, dass ich auch stderr umleite, und entfernen2>&1
Sie das Kontrollkästchen, wenn Sie dies nicht möchten). Wenn Sie auch wollen , um zu sehen , was los ist ,bash -x foo.sh 2>&1 | tee log.file
.quelle
Es gibt einen sehr einfachen und praktischen Weg:
Mit können Sie
script
ein Typoskript für die Terminalsitzung erstellenStarten Sie den Befehl
script
Wenn das Argument
file
gegeben ist, zum Beispielscript ~/tmp/output
,script
speichert den Dialog in dieser Datei. Wird kein Dateiname angegeben, wird der Dialog in der Datei gespeicherttypescript
Starten Sie Ihr Skript oder was auch immer Sie starten möchten
Wenn Ihr Skript fertig ist, stoppen Sie
script
über Ctrl-DÜberprüfen Sie die Ausgabe in der Standardausgabedatei
typescript
script
Verwenden Sie den Parameter, um Ihren Befehl in einem Schritt mit zu starten-c
Die Verwendung
script
in Ihrem Skript macht keinen Sinn, dascript
die Shell gegabelt oder eine neue Shell gestartet wird.quelle
script logfilename
, damit ich es auswählen kann.script
Nützlich ist auch eine Überwachung über ein Fifo. Vonman script
: "-f, --flush
Ausgabe nach jedem Schreibvorgang spülen. Dies ist für die Telekooperation hilfreich: Eine Personmkfifo foo; script -f foo
überwacht in Echtzeit, was mitcat foo
" getan wird . Es kann auch verwendet werden, um zu überwachen, wann ein Programm auf eine Eingabe wartet, oder beispielsweise durch Überwachen des Zeitstempels des FIFO.