邮件 bash 变量在新行

mail bash variable on a new line

echo $d 产生下面的输出,在每个';'之后用换行分隔

REVOKE ALL ON URI 'hdfs://nameservice/data/ed_bos_reporting_stg' FROM ROLE ed_bos_reporting; 
REVOKE ALL ON URI 'hdfs://nameservice/data/fq' FROM ROLE ed_edw_telephony_rw; 
REVOKE ALL ON URI 'hdfs://nameservice/data/fq' FROM ROLE edw_rw; 
REVOKE ALL ON URI 'hdfs://nameservice/data/standard_register_mail_piece' FROM ROLE standard_register_mail_piece_rw; 
REVOKE ALL ON URI 'hdfs://nameservice/data/tenant/ed_edw/LSFE_CDC/target_files' FROM ROLE edw_rw; 
REVOKE ALL ON URI 'hdfs://nameservice/data/tenant/ed_standard_register_mail_piece_stg' FROM ROLE ed_standard_register_mail_piece_rw;

当我在邮件命令中输入 $d -

echo "$d" | mail -s "subject" -r "Name<Name@somewhere.com >" first.last@somewhere.com

结果没有换行分隔。

我试过:

echo -e "$d\n" | mail -s "subject" -r "Name<Name@somewhere.com >"
echo -e "$d" $'\n' | mail -s "subject" -r "Name<Name@somewhere.com >"

还有其他一些运气不好的人。任何 suggestions/leads 文档将不胜感激。

更新 这在 gmail 中工作正常。但是不在 Outlook 中

如果您希望在某个字符上用换行符分隔输出,tr 非常适合:

echo "$d" | \
mail -s "subject" -r "Name<Name@somewhere.com >" first.last@somewhere.com | \
tr ';' $'\n'

这将删除分号。我确信有一种方法可以在不删除它们的情况下做到这一点,但这是我头脑中唯一知道的方法; HTH

我没有 outlook,无法测试我的假设,但 outlook 可能要求文本使用 \r\n 行结尾而不是 \n 行结尾。

尝试

sed $'s/$/\r/' <<< "$d" | mail ...

或安装dos2unix并使用

unix2dos <<< "$d" | mail ...

将 linux \n 行结尾转换为 windows \r\n 行结尾。

Outlook 似乎从我的邮件中删除了多余的换行符。我能够使用 awk 来解决这个问题。

echo "$d" | awk '{ print [=10=]"   " }' | mail -s "subject" -r "Name<Name@somewhere.com >" first.last@somewhere.com

这会读取每一行,并在末尾重新打印三个空格。展望现在很高兴。 https://blog.dhampir.no/content/outlook-removes-extra-line-breaks-from-plain-text-emails-how-to-stop-it