it-swarm.com.de

Wie zeichnet man die Ausgabe eines Bash-Skripts vom Terminal auf, ohne die Terminal-Ausgabe zu unterdrücken?

Wie zeichnet man die Ausgabe eines Bash-Skripts vom Terminal auf, ohne die Terminalausgabe wie $ ./bash-script.sh >> terminal.txt zu unterdrücken? und ich möchte die resultierende Ausgabe als Text aufzeichnen und auch im Terminal behalten.

8
Pavel Sayekat

Der Befehl tee eignet sich zum Erfassen der Ausgabe von nicht interaktiven Befehlen. Für interaktive Terminalanwendungen gibt Ihnen das Paket bsdutils den Befehl script, mit dem Sie die Ausgabe auf dem Terminal aufzeichnen und gleichzeitig wie gewohnt mit der Anwendung interagieren können. Der Unterschied zwischen den beiden besteht darin, dass script der Anwendung den Eindruck vermittelt, unter einem Terminal ausgeführt zu werden, und dies kann das Verhalten des Dienstprogramms beeinflussen. Außerdem erfasst script Standardfehler, ohne dass zusätzliche Weiterleitungen in der Shell-Befehlszeile erforderlich sind.

Du kannst es so benutzen:

$ script -c script.sh output.log

(wobei angenommen wird, dass script.sh in $PATH zu finden ist) oder

$ script -c "script.sh arguments" output.log

Wenn Sie es ohne die Option -c "${command}" ausführen, wird Shell ausgeführt und die Shell-Sitzung kann in einer Datei gespeichert werden.

Da bsdutils ein "wesentliches" Paket ist und dessen Priorität "erforderlich" ist, ist es möglicherweise bereits installiert. Geben Sie einfach den Befehl script ein (gefolgt von exit, um die Aufzeichnung in der Standarddatei TypeScript zu beenden).

Im Allgemeinen bevorzuge ich persönlich normalerweise script gegenüber tee, obwohl viele interaktive Terminalanwendungen scheinbar einwandfrei funktionieren, wenn die Ausgabe an tee weitergeleitet wird.

7
FooF

Sie können tee verwenden.

Zum Beispiel,

./script.sh | tee logfile

bewirkt, dass die Ausgabe des Skripts in logfile gespeichert und in der Terminalausgabe angezeigt wird.

Wenn Sie alle Ausgaben nachfolgender Skriptausführungen speichern möchten, möchten Sie möglicherweise anhängen an diese Datei. In diesem Fall würden Sie stattdessen tee -a verwenden

./script.sh | tee -a logfile
./script2.sh | tee -a logfile
8
Anwar

Ich möchte die resultierende Ausgabe als Text aufzeichnen und auch im Terminal behalten

Was Sie wollen, ist der Befehl tee. Es ermöglicht das Echo von Text in stdout und in eine Datei. Zum Beispiel:

$ ls -l /etc/passwd | tee output_file.txt                                      
-rw-r--r-- 1 root root 2989 6月  17 20:45 /etc/passwd
$ cat output_file.txt                                                          
-rw-r--r-- 1 root root 2989 6月  17 20:45 /etc/passwd
8