Bash中如何将变量存储的两个日志文件内容合并发送邮件?
解决Bash中mail命令同时发送两个日志文件内容的问题
嘿,我来帮你搞定这个邮件内容的问题!你当前的命令之所以没法把两个日志内容都放进邮件里,核心原因是bash的输入重定向<只能指定一个输入源——你写的< $a $b里,$b会被mail命令当成额外的收件人地址,而不是要读取的文件内容,自然就没法把它的内容加到邮件里啦。
下面给你几个实用的解决思路:
方法1:用cat合并文件内容后通过管道传递
这是最直观的方法,先用cat把两个日志文件的内容按顺序合并输出,再通过管道|把这个输出作为mail命令的输入:
cat "$a" "$b" | /usr/bin/mail -s "Test" mail_address
如果想在两个文件内容之间加个分割线方便区分,可以改成这样:
{ cat "$a"; echo -e "\n=== 分割线:content1.log 结束,content2.log 开始 ===\n"; cat "$b"; } | /usr/bin/mail -s "Test" mail_address
这里给变量加了双引号"$a" "$b",是为了避免如果日志路径里包含空格或特殊字符时出现解析错误,养成这个习惯更稳妥。
方法2:用进程替换作为输入源
如果你偏好重定向的写法,也可以用bash的进程替换功能,把合并后的内容作为输入:
/usr/bin/mail -s "Test" mail_address < <(cat "$a" "$b")
<(cat "$a" "$b")会创建一个临时的文件描述符,把cat合并后的内容传递给mail的输入,效果和管道方法是一样的。
额外提醒
如果你的需求是把日志文件作为附件发送(而不是正文),可以检查下你使用的mail版本是否支持-A参数(比如GNU mailutils的mail命令),用法是:
/usr/bin/mail -s "Test" -A "$a" -A "$b" mail_address
不过看你的问题描述是要把内容放进邮件正文,所以前面两种合并正文的方法更符合你的需求。
内容的提问来源于stack exchange,提问作者Boten
相关产品推荐
相关产品推荐

