这个问题在这里已有答案:
以下是代码 . 我没有以表格格式获得输出 . 有人可以帮忙吗?
#!/bin/bash
df -h > /home/test/space.txt
tmp="/home/test/tmp.html"
input="/home/test/space.txt"
echo '<html><body><table border=1>' > "$tmp"
awk '{print "<tr>";for(i=1;i<=NF;i++)print "<td>" $i"</td>";print "</tr>"} END{print "</table></body></html>"}' "$input" >> "$tmp"
cat $tmp | mail -s "$(echo -e "Test\nContent-Type: text/html")" -r yourmailaddress@...com
In email receiving output like below.
<html><body><table border=1> <tr> <td>Use%</td> <td>Avail</td> <td>Used</td> <td>Filesystem</td> </tr> <tr> <td>47%</td> <td>100G</td> <td>90G</td> <td>rootfs</td> </tr>
1 回答
问题可能是您的
mail
程序将您的管道输入编码为:(鉴于您的
mail
可能是snail
,Berkeley mailx
或heirloom_mailx
- 所有这些都来自Berkeley邮件的各种迭代,其中包含最新的,当前维护的版本s-nail 14.9.11-1 (Homepage))如果
mail
是提供-a
(attach)选项的派生之一,那么可能就是这样 . 虽然您的电子邮件正文仍然是Content-Type: text/plain
,但您的附件将以Content-Type: text/html
的形式出现,大多数邮件阅读器将在电子邮件中显示(这似乎是您的目标) .只需对您的日常工作进行一些调整就可以将
df
的输出作为表格进行准备,您的工作效果非常好 . 所做的唯一调整(可选,但是帮助)是使用快速sed
替换来将"Mounted on"
替换为"Mounted_on"
,以便为awk
提供一致数量的字段,然后设置表"width=60%"
以防止表格被渲染(技术术语) .例如,包括调整,你可以这样做:
(明显注意:根据系统和电子邮件的需要更改分配给
tmp
的路径)除了调整之外,上面提到的唯一变化是"attach"将html文件添加到消息中而不是将其转储到消息中 .
mail
(但不是全部)的大多数变体都提供-a
(附加)选项 . 这提供了一种简单的机制,用于将文件作为正确形成和编码的附件发送 . 为了提供邮件正文,我只包含一个简单的"df attached"
并使用echo
将文本传递给mail
命令 . 如上所示,mail
命令是:然后检查旧版本的Thunderbird,您会找到
df
信息的表格输出,例如仔细看看,让我知道这是你正在尝试的,以及你是否能够在你的命令行邮件程序版本中找到
-a
(附加)选项(如果没有,我建议检查你的发行版是否提供s-nail
或heirloom-mailx
. 对于一个小包,这两个实现提供了强大的命令行邮件功能)Edit Per-Request to Encode as "text/html" in Body of Message
这里有很多将取决于你有哪些
mail/mailx/s-nail
包 . 使用s-nail
(通常也称为mailx
),-M
选项允许您为stdin
上为电子邮件正文接收的文本指定Content-type
. 在这种情况下,您需要将"$tmp"
重定向到您的邮件命令,同时指定-M "text/html"
作为选项,例如将上面的最后一行更改为:使用
s-nail/mailx
会导致:( note: 我必须从另一台机器发送,例如Archlinux将
s-nail
封装为mailx
而OpenSuSE封装heirloom-mailx
)对于像
heirloom-mailx
这样的其他软件包,看起来附件是基于扩展名mailx
设置Content-type
的唯一方法 . 它是通过读取具有以下形式语法的MIME类型文件来实现的:因此,在这种情况下,看起来您必须重新编写邮件头,或手动创建邮件消息的正文,包括消息的表部分的
Content-type
,类似于:(或者你的
charset
应该是什么)这就是为什么我建议,如果你没有使用基于
s-nail
的mail/mailx
,那么去看看你的发行版是否提供了s-nail
包,否则它甚至值得从源码构建并放入/usr/local/bin
.