为什么不保留结果电子邮件中的新系列字符?
#!/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 Statusnfrom:email@example.comn$msg"
echo $mail | /usr/sbin/sendmail "email2@example.com"
我收到该脚本生成的电子邮件,但是,整个身体都在一行!/tmp/ip.txt正是我希望电子邮件的外观。
我最近遇到了这一点。我能够解决它,将" -e"选项添加到Echo中。
更改此内容:
echo $ mail |/usr/sbin/sendmail" email2@example.com"
:
echo -e" $ mail" |/usr/sbin/sendmail" email2@example.com"
希望会有所帮助。
您可以使用"此处的文档"(<<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
- 使用双重报价:
echo "$mail" | /usr/bin/sendmail ...
- 不应该是标题和消息之间的两个
n
:
如:
mail="subject:Home Server Statusnfrom:email@example.comnn$msg"
{
printf "subject:Home Server Statusnfrom:email@example.comnn"
cat "$file"
} | /usr/sbin/sendmail "email2@example.com"
使用 echo $mail
,文件的内容出现在命令行上,并用单词扩展来对其进行处理。使用cat "$file"
,文件名出现在命令行上,但文件的内容却没有,因此可以免受bash的安全。