2010-02-16 2 views
6
#!/bin/bash 
MESSAGE="Line one. /n" 

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

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

Является ли это тем, как я должен получить каждую строку на своей собственной линии?email from bash script

+0

Джим, добро пожаловать в StackOverflow. Не забудьте отформатировать образцы кода, выбрав их и нажав кнопку «Код» (тот, у кого есть единицы и нули на нем). –

+0

Спасибо за подсказку кнопки кода. – Jim

ответ

13

Используйте heredoc.

mail -s "test" "[email protected]" << END_MAIL 
Line one. 
Line two. 
Line three. 
END_MAIL 
+3

Если вы укажете первый разделитель (здесь 'END_MAIL'), это предотвратит расширение параметров, подстановку команд и т. Д., Что может быть желательно. –

2

Рекомендации Heredoc хорошо, плюс вы можете рассмотреть вопрос об использовании mailx, для которой существует стандарт Posix или, возможно, sendmail, который будет существовать, если почтовая программа либо Sendmail или постфикса. (Я не уверен в qmail.)

Если вы не используете sendmail, также рекомендуется установить переменную MAILRC в обход скрипта конфигурации пользователя, если таковой имеется.

+0

Я большой поклонник использования 'sendmail' в сценариях оболочки. +1 –

8

Изменение:

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

To:

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

Это должен быть принятый ответ. Переключатель '-e' расширяет символы' \ n' новой строки, как ожидалось, и легче использовать в скрипте в одной строке, чем метод heredoc. –