Wie kann die Ausgabe (stdout und stderr) am besten unterdrückt werden, wenn das Programm nicht mit einem Code ungleich Null beendet wird? Ich denke:
quiet_success()
{
file=$(mktemp)
if ! "$@" > "$file" 2>&1; then
cat "$file"
fi
rm -f "$file"
}
Und renn, quiet_success my_long_noisy_script.sh
aber ich bin mir nicht sicher, ob es einen besseren Weg gibt. Ich habe das Gefühl, dass dies etwas sein muss, was andere Leute tun müssen.
Im Kontext möchte ich dies zu meinen Cron-Skripten hinzufügen, damit mir alles per E-Mail geschickt wird, wenn sie fehlschlagen, aber nicht, wenn sie es nicht tun.
shell-script
cron
io-redirection
dimo414
quelle
quelle
sh
Syntax ist und Ihre Umleitungsreihenfolge rückwärts ist (> "$file" 2>&1
verwenden Sie mehr Anführungszeichen).Antworten:
Sie müssen die Ausgabe irgendwo puffern, egal was passiert, da Sie auf den Exit-Code warten müssen, um zu wissen, was zu tun ist. So etwas ist wahrscheinlich am einfachsten:
quelle
set -o xtrace
in Ihrem Shell-Skript verwenden, die gesamte Ausgabe im Rahmen der Protokollierung der Zuordnungsdetails erneutoutput=...
angezeigt wird :-). In diesem Fall ist es wahrscheinlich besser zu verwendenchronic
.Das
moreutils
Paket enthält ein Programmchronic
für diesen Zweck. Du nennst es einfach soSehr praktisch bei Cronjobs.
quelle
chronic
fürcronic
, die ein ähnliches Programm ist , dass die Ausgabe unterdrückt , wenn nicht ein Befehl mit einem Nicht-Null - Code vorhanden ist oder erzeugt Standard - Fehlerausgabe .