Come inviare output sia allo schermo che alla posta?


9

Uso quanto segue per inviare un'e-mail alla fine di uno script.

echo "Script finished on `date`" | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com".

Tuttavia, voglio fare eco allo stesso messaggio anche sullo schermo. Come posso farlo nella stessa dichiarazione?

Risposte:


19

Il modo più semplice è probabilmente teeil messaggio a stderr e stdout:

echo "Script finished on date" | tee /dev/stderr \
    | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com"

teeduplica il suo input in più destinazioni, incluso stdout. Per impostazione predefinita, sia stderr che stdout vanno sullo schermo; stai reindirizzando stdout a Mail, lasciando solo stderr sullo schermo.

Se ne hai bisogno in stdout per qualche motivo, puoi reindirizzarlo indietro usando una subshell (o in altri modi):

(
    echo "Script finished on date" | tee /dev/stderr \
        | /usr/bin/Mail -s "Script complete" "myaccount@myserver.com"
) 2>&1

3
in alternativa, collega a un file e poi invia il file ... molto utile se l'output è enorme e vuoi inviarlo, ad esempio, come allegato MIME con gzip codificato in base64. o semplicemente reindirizzare tutto l'output su un file (ad es. con exec &> $LOGFILE) e quindi ripristinare stdout, cat il file su stdout e inviarlo via e-mail.
Cas

Grazie Craig. Dato che il mio testo in questo caso è molto piccolo, seguirò la risposta di derobert.
Sammy,

Hmm .. ha funzionato ma mi sono reso conto che dovevo aggiungere altro alla descrizione del mio problema. Ho usato questa soluzione come ultima riga del mio script. Ho usato un comando "nohup" sul mio script per raccogliere tutto l'output del mio script come "nohup.out" e tutto ciò che vedo è solo questa riga "Script finito su xxxxx". Prima di utilizzare questa soluzione, ho ottenuto tutto l'output dello script. C'è un modo in cui posso aggiungere l'output di quest'ultima riga invece di cancellare tutto?
Sammy,

1
L'uso di "tee -a" ha risolto il problema.
Sammy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.