Es gibt ein Bash-Skript, das einige Protokolle druckt und einige Argumente zulässt. Das Skript druckt die Protokolle auf STDOUT. Nehmen wir an, der Name des Skripts lautetAAA.sh
Ich möchte auch das Skript zum Drucken der Protokolle in STDOUT
und a erstellen file
. Dies kann mit erfolgen tee
.
$ AAA.sh -a -b --c=d | tee 2012-07-03-080000.log
Aber mein Team vergisst oft, die Ausgabe an weiterzuleiten tee
. Wir sollten die Protokolle in einer Datei speichern. Deshalb möchte ich das Skript mit umschließen tee
.
Was ich tun möchte, ist
$ WrapAAAwithTee.sh -a -b --c=d
Dann sollte AAAwithTee.sh das Protokoll auf STDOUT und in eine Protokolldatei drucken.
Wie kann ich AAA.sh umschließen?
Antwort1
Dieses Skript funktioniert besser als die vorherige Antwort:
#!/bin/bash
exec AAA.sh "$@" | tee "$(date +'%F-%H%M%S').log"
Dies funktioniert einwandfrei mit Leerzeichen und gibt der Protokolldatei einen eindeutigen Namen, basierend auf der aktuellen Zeit. Dies exec
macht es auch etwas effizienter und entfernt den Wrapper aus Ihrem Prozessbaum, sobald das untergeordnete Element gestartet wurde.
Antwort2
Ihr WrapAAAwithTee.sh
sollte enthalten:
#!/bin/bash
AAA.sh "$@" | tee 2012-07-03-080000.log
tee
funktioniert normal innerhalb eines Skripts und "$@"
enthält alle übergeordneten Argumente.