6
votes

Email de Bash Script

#!/bin/bash
MESSAGE="Line one. /n"

MESSAGE="$MESSAGE Line two. /n"
MESSAGE="$MESSAGE Line three."

echo $MESSAGE | mail -s "test" "example@example.com"
Is that how I should get each line, on its own line?

2 commentaires

Jim, bienvenue à Stackoverflow. N'oubliez pas de formater vos échantillons de code en les sélectionnant et en appuyant sur le bouton "Code" (celui avec ceux avec des zéros).


Merci pour la pointe du bouton de code :)


3 Réponses :


14
votes

Utilisez un Heredoc .

mail -s "test" "example@example.com" << END_MAIL
Line one.
Line two.
Line three.
END_MAIL


1 commentaires

Si vous citez le premier délimiteur (ici end_mail ), il empêchera l'expansion des paramètres, la substitution de commande, etc., qui peut être souhaitable.



2
votes

Le conseil Heredoc est bon, plus vous voudrez peut-être envisager d'utiliser mailx pour lequel il existe une norme POSIX ou peut-être sendmail qui existe si le mailer est SEDMAIL ou postfix. (Je ne suis pas sûr de Qmail.)

sauf si vous utilisez SendMail, il est également judicieux de définir la variable Mailrc sur / dev / null pour contourner le script de configuration de l'utilisateur, le cas échéant.


1 commentaires

Je suis un grand fan d'utilisation de sendmail dans les scripts shell. +1



8
votes

Modification: xxx

à: xxx


1 commentaires

Cela devrait être la réponse acceptée. Le commutateur -E étend les caractères \ n Nouveauline comme prévu et est plus facile à utiliser dans un script sur une seule ligne que la méthode Heredoc.