为什么以下内容不会在生成的电子邮件中保留新的换行符?
#!/bin/bash
file="/tmp/ip.txt"
address=$(curl -s http://ipecho.net/plain; echo)
ifconfig=$(ifconfig)
function build_body
{
echo "----------------------------------------------------------------" > $file
echo "IP Address: $address (according to http://ipecho.net/plain)" >> $file
echo "----------------------------------------------------------------" >> $file
echo >> $file
echo "Result from ifconfig:" >> $file
echo >> $file
echo "$ifconfig" >> $file
echo >> $file
}
build_body
msg=$(cat $file)
mail="subject:Home Server Status\nfrom:email@example.com\n$msg"
echo $mail | /usr/sbin/sendmail "email2@example.com"
我收到了这个脚本生成的电子邮件,然而,整个身体都在一条线上! /tmp/ip.txt正是我希望电子邮件的样子。
答案 0 :(得分:8)
我最近碰到了这个。我能够解决它添加' -e'回声的选项。
改变这个:
echo $ mail | / usr / sbin / sendmail" email2@example.com"
To This:
echo -e" $ mail" | / usr / sbin / sendmail" email2@example.com"
希望这有帮助。
答案 1 :(得分:4)
您可以使用“here documents”(<<END
),使函数输出其结果为标准输出。
#!/bin/bash
address=$(curl -s http://ipecho.net/plain; echo)
function build_body
{
cat <<END
----------------------------------------------------------------
IP Address: $address (according to http://ipecho.net/plain)
----------------------------------------------------------------
Result from ifconfig:
END
ifconfig
echo
}
( cat <<END; build_body) | /usr/sbin/sendmail -i -- "email2@example.com"
Subject:Home Server Status
From:email@example.com
END
答案 2 :(得分:3)
echo "$mail" | /usr/bin/sendmail ...
\n
:如:
mail="subject:Home Server Status\nfrom:email@example.com\n\n$msg"
答案 3 :(得分:2)
{
printf "subject:Home Server Status\nfrom:email@example.com\n\n"
cat "$file"
} | /usr/sbin/sendmail "email2@example.com"
使用echo $mail
,文件的内容出现在命令行上,bash使用word扩展处理它们。对于cat "$file"
,文件名出现在命令行中,但文件的内容不会出现,因此bash是安全的。