我如何在bash脚本中保留新的sendmail系列字符



为什么不保留结果电子邮件中的新系列字符?

#!/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
  1. 使用双重报价:echo "$mail" | /usr/bin/sendmail ...
  2. 不应该是标题和消息之间的两个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的安全。

相关内容

  • 没有找到相关文章

最新更新