¿Cómo enviar la salida a la pantalla y al correo?

9

Utilizo lo siguiente para enviar un correo electrónico al final de un script.

echo "Script finished on `date`" | /usr/bin/Mail -s "Script complete" "[email protected]".

Sin embargo, también quiero repetir el mismo mensaje en la pantalla. ¿Cómo hago eso en la misma declaración?

sammy
fuente

Respuestas:

19

Probablemente, la forma más fácil es enviar teeun mensaje a stderr y stdout:

echo "Script finished on date" | tee /dev/stderr \
    | /usr/bin/Mail -s "Script complete" "[email protected]"

teeduplica su entrada a múltiples destinos, incluido stdout. Por defecto, stderr y stdout van a la pantalla; estás redirigiendo stdout a Mail, dejando solo stderr yendo a la pantalla.

Si lo necesita en stdout por alguna razón, puede redirigirlo de nuevo usando una subshell (o varias otras formas):

(
    echo "Script finished on date" | tee /dev/stderr \
        | /usr/bin/Mail -s "Script complete" "[email protected]"
) 2>&1
derobert
fuente
3
alternativamente, haga un tee con un archivo y luego envíelo por correo ... muy útil si el resultado es enorme y desea enviarlo, por ejemplo, como un archivo adjunto MIME codificado en base64. o simplemente redirija toda la salida a un archivo (por ejemplo, con exec &> $LOGFILE) y luego restaure stdout, coloque el archivo en stdout y envíelo por correo.
cas
Gracias Craig Como mi texto en este caso es muy pequeño, iré con la respuesta de derobert.
sammy
Hmm ... esto funcionó, sin embargo, me di cuenta de que necesitaba agregar más a la descripción de mi problema. Usé esta solución como la última línea de mi script. Utilicé un comando "nohup" en mi secuencia de comandos para recopilar toda la salida de mi secuencia de comandos como "nohup.out" y todo lo que veo es solo esta línea "Secuencia de comandos finalizada en xxxxx". Antes de usar esta solución, obtuve todos los resultados del script bien. ¿Hay alguna forma de agregar el resultado de esta última línea en lugar de borrarlo todo?
sammy
1
El uso de "tee -a" resolvió el problema.
sammy