Lösung 1: exec
Sie können einen exec-Befehl am Anfang des Skripts platzieren:
$ cat script1 #!/bin/bash exec > >(tee file.log) echo one echo two
Hier ist ein Beispiel für die Ausführung von script1:
$ bash script1 $ one two $
Beachten Sie, dass die Shell-Eingabeaufforderung zurückgegeben wurde, bevor die Ausgabe des Skripts abgeschlossen war. Dies liegt daran, dass die Ausgabe an einen Unterprozess ging und aufgrund von Unstimmigkeiten bei Multitasking nach eigenem Zeitplan abgeschlossen wird. Aus diesem Grund bevorzuge ich die zweite Lösung:
Lösung 2: Gruppierung
Sie können das gesamte Skript in eine Shell-Gruppe {...}
einfügen und dann die Ausgabe der Gruppe umleiten:
$ cat script2 #!/bin/bash { echo one echo two } | tee file.log
Dies kann für beliebig komplexe Skripte erfolgen. Einfach {
am Anfang und } | tee file.log
am Ende setzen.
Ein Beispiellauf sieht folgendermaßen aus:
$ bash script2 one two $
Beachten Sie, dass die Ausgabe ordentlich abgeschlossen wird, bevor die Aufforderung zurückgegeben wird.