Comment envoyer la sortie à l'écran et au courrier?


9

J'utilise ce qui suit pour envoyer un e-mail à la fin d'un script.

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

Cependant, je veux également faire écho du même message à l'écran. Comment dois-je procéder dans la même déclaration?

Réponses:


19

Le moyen le plus simple est probablement teed'envoyer le message à stderr ainsi qu'à stdout:

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

teeduplique son entrée vers plusieurs destinations, y compris stdout. Par défaut, stderr et stdout vont à l'écran; vous redirigez stdout vers Mail, laissant simplement stderr aller à l'écran.

Si vous en avez besoin dans stdout pour une raison quelconque, vous pouvez le rediriger en utilisant un sous-shell (ou plusieurs autres façons):

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

3
Alternativement, té vers un fichier, puis envoyez le fichier ... très utile si la sortie est énorme et que vous souhaitez l'envoyer, par exemple, sous forme de pièce jointe MIME gzippée en base64. ou redirigez simplement toutes les sorties vers un fichier (par exemple avec exec &> $LOGFILE), puis restaurez stdout, transférez le fichier vers stdout et envoyez-le par courrier.
cas

Merci Craig. Étant donné que mon texte dans ce cas est très petit, je vais suivre la réponse de derobert.
sammy

Hmm .. cela a fonctionné mais j'ai réalisé que je devais ajouter plus à la description de mon problème. J'ai utilisé cette solution comme dernière ligne de mon script. J'ai utilisé une commande "nohup" sur mon script pour collecter toutes les sorties de mon script en tant que "nohup.out" et tout ce que je vois est juste cette ligne "Script terminé sur xxxxx". Avant d'utiliser cette solution, j'ai bien obtenu toutes les sorties de script. Existe-t-il un moyen d'ajouter la sortie de cette dernière ligne au lieu de tout effacer?
sammy

1
L'utilisation de "tee -a" a résolu le problème.
sammy
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.