在Linux中使用mail命令时如何将多行回显到电子邮件正文中?

在Linux中使用mail命令时如何将多行回显到电子邮件正文中?

我必须将一些文件名列表(查找命令的结果)发送到电子邮件正文中,并附上一条消息“下面是传输的文件列表”。如何将此消息与上述查找结果合并到邮件正文中。

前任:

echo "Below are list of files transfered" | mail -s "$some_subject" $some_mail_id

find . -maxdepth 1 -type f -name $(echo ${FILE_ARR[@]}| sed 's/ / -o -name /g') | \
  mail -s "$some_subject" $some_mail_id

我可以单独执行上述命令,但无法将它们合并为一个。

请帮忙。谢谢。

答案1

(您可以使用括号和将多个命令分组到一个子 shell 中),然后将子 shell 的输出通过管道传输到mail

例如(在“下面...”文本后有一些额外的换行符):

( printf '%s\n\n\n' "Below are list of files transfered"
  find . -maxdepth 1 -type f -name $(echo ${FILE_ARR[@]}| sed 's/ / -o -name /g')
) | mail -s "$some_subject" "$some_mail_id"

或者,如果不需要 find 命令(而且看起来并不需要):

( printf '%s\n\n\n' "Below are list of files transfered"
  printf '%s\n' "${FILE_ARR[@]}"
) | mail -s "$some_subject" "$some_mail_id"

答案2

这是一个旧线程,但这里有一个发送多行消息的简单替代方案。有趣的是,您可以添加任何您喜欢的注释、命令和变量。 “<<EOF”和“EOF”之间的所有内容都将被视为消息的一部分。

mail -s "Subject" [email protected] <<EOF
Current date: $(date)
Here is the list of transfered files:

$(command 1; command 2 ; ... ; command n)

(This is an automated message. Bla bla bla...)
EOF

相关内容