如何在bash脚本中为sendmail保留换行符?

Cha*_*lie 4 bash sendmail echo

为什么以下内容不会在生成的电子邮件中保留新行字符?

#!/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"
Run Code Online (Sandbox Code Playgroud)

我收到这个脚本生成的电子邮件,然而,整个身体都在一条线上!/tmp/ip.txt正是我希望电子邮件的外观.

小智 9

我最近碰到了这个.我能够解决它为echo添加'-e'选项.

改变这个:

echo $ mail |/usr/sbin/sendmail"email2@example.com"

对此:

echo -e"$ mail"|/usr/sbin/sendmail"email2@example.com"

希望这会有所帮助.


AnF*_*nFi 5

您可以使用“此处文档”( <<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
Run Code Online (Sandbox Code Playgroud)