You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:20:49