tags:

views:

50

answers:

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

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

echo $MESSAGE | mail -s "test" "[email protected]"

Is that how I should get each line, on its own line?

+5  A: 

Use a heredoc.

mail -s "test" "[email protected]" << END_MAIL
Line one.
Line two.
Line three.
END_MAIL
Matthew Flaschen
If you quote the first delimiter (here `END_MAIL`) it will prevent parameter expansion, command substitution, etc., which may be desirable.
Dennis Williamson
+1  A: 

The heredoc advice is good, plus you might want to consider using mailx for which there exists a Posix standard or perhaps sendmail which will exist if the mailer is either sendmail or postfix. (I'm not sure about qmail.)

Unless using sendmail, it's also a good idea to set the MAILRC variable to /dev/null to bypass the user's configuration script, if any.

DigitalRoss
I'm a big fan of using `sendmail` in shell scripts. +1
Norman Ramsey
A: 

Change:

echo $MESSAGE | mail -s "test" "[email protected]"

To:

echo -e $MESSAGE | mail -s "test" "[email protected]"
Jim