Umschließen eines Shell-Skripts mit „tee“

Umschließen eines Shell-Skripts mit „tee“

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 STDOUTund 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 execmacht es auch etwas effizienter und entfernt den Wrapper aus Ihrem Prozessbaum, sobald das untergeordnete Element gestartet wurde.

Antwort2

Ihr WrapAAAwithTee.shsollte enthalten:

#!/bin/bash
AAA.sh "$@" | tee 2012-07-03-080000.log

teefunktioniert normal innerhalb eines Skripts und "$@"enthält alle übergeordneten Argumente.

verwandte Informationen