下面是代码。我没有以表格格式输出。有人可以帮忙吗?
#!/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
在电子邮件中收到如下所示的输出。
<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>
答案 0 :(得分:1)
问题很可能是您的mail
程序会将管道输入编码为:
Content-Type: text/plain; charset=us-ascii
(假设您的mail
很可能是snail
,Berkeley mailx
或heirloom_mailx
,它们都是从Berkeley邮件的各种迭代中得出的,这些迭代具有最新的,当前维护的版本{{ 3}})
如果您的mail
是提供-a
(附加)选项的衍生产品之一,则可能是可行的方法。尽管您的电子邮件正文仍为Content-Type: text/plain
,但您的附件将以Content-Type: text/html
的形式出现,大多数邮件阅读器将在电子邮件本身中显示该附件(这似乎是您的目标)。
只需对例程进行一些调整,即可将df
的输出作为表进行准备,那么您的工作就很好了。唯一进行的调整(可选,但有帮助)是使用快速的sed
替换用"Mounted on"
替换"Mounted_on"
,以提供awk
可以使用的一致数量的字段使用,然后设置表"width=60%"
,以防止表呈现压缩的(技术术语)。
例如,包括调整在内,您可以执行以下操作:
tmp=/home/david/tmp/df.html
echo '<html><body><table border=1 width=60%>' > "$tmp"
df | sed 's/Mounted\son/Mounted_on/' |
awk '{print "<tr>";for(i=1;i<=NF;i++)print "<td>" $i"</td>";print "</tr>"}
END
{print "</table></body></html>"}' >> "$tmp"
echo "df attached" | mailx -s "wizard df" -a "$tmp" david@nirvana
(明显的注意事项:根据系统和电子邮件的需要更改分配给tmp
的路径)
除了这些调整之外,上述唯一的更改是将html文件“附加”到邮件上,而不是将其转储到邮件中。 mail
(但不是全部)的大多数变体都提供了-a
(附加)选项。这提供了一种用于将文件作为正确格式和编码附件发送的简单机制。为了提供邮件的正文,我只添加了一个简单的"df attached"
,并使用echo
将文本传递给mail
命令。如上所示,mail
命令为:
echo "df attached" | mailx -s "wizard df" -a "$tmp" david@nirvana
然后检入较旧版本的Thunderbird,您会找到df
信息的表格输出,例如
仔细检查一下,让我知道这是否是您要尝试的内容,以及是否能够在您的命令行邮件程序版本中找到-a
(附加)选项(如果没有,我建议检查您的发行版提供s-nail
还是heirloom-mailx
。对于一个很小的软件包,这两个实现提供了强大的命令行邮件功能)
编辑每个请求以在邮件正文中将其编码为"text/html"
在这里,很大程度上取决于您拥有的mail/mailx/s-nail
软件包。使用s-nail
(通常也别名为mailx
),-M
选项可让您为Content-type
上的正文指定stdin
电子邮件。在这种情况下,您需要做的就是将"$tmp"
重定向到您的邮件命令,同时将-M "text/html"
指定为一个选项,例如将上面的最后一行更改为:
mailx -M "text/html" -s "wizard df redir -M" david@nirvana < "$tmp"
使用s-nail/mailx
会导致:
(注意:,我必须从另一台计算机发送,例如Archlinux将s-nail
打包为mailx
,而OpenSuSE打包heirloom-mailx
)
对于像heirloom-mailx
这样的其他软件包,看来附件是将mailx
设置为Content-type
基于扩展名的唯一方法。通过读取具有以下格式的语法的MIME类型文件来做到这一点:
type/subtype extension [extension . . .]
因此,在这种情况下,您似乎必须重写邮件标头,或者手动创建包含Content-type
的邮件的正文,该邮件的正文部分类似于以下内容:
Content-Type: text/html; charset=us-ascii
(或您的charset
应该是什么)
这就是为什么我建议,如果您不使用基于mail/mailx
的{{1}},然后看看您的发行版是否提供s-nail
软件包,或者甚至值得从中构建源并放入s-nail
。