无法通过shell获取表格式的输出

无法通过shell获取表格式的输出,shell,email,Shell,Email,下面是代码。我没有得到表格格式的输出。有人能帮忙吗 #!/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

下面是代码。我没有得到表格格式的输出。有人能帮忙吗

#!/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
#/bin/bash
df-h>/home/test/space.txt
tmp=“/home/test/tmp.html”
input=“/home/test/space.txt”
回显“”>“$tmp”

awk'{print”“;for(i=1;i问题可能是您的
mail
程序将管道输入编码为:

Content-Type: text/plain; charset=us-ascii
(鉴于您的
邮件
可能是
snail
Berkeley mailx
,或
herigroup\u mailx
——所有这些都是从Berkeley mail的各种最新版本中衍生出来的)

如果您的
邮件
是提供
-a
的衍生产品之一(附件)选项,这可能是一种方式。虽然您的电子邮件正文仍然是
内容类型:text/plain
,但您的附件将以
内容类型:text/html
的形式出现,大多数邮件阅读器将在电子邮件中显示它(这似乎是您的目标)

只需对例程进行一些调整,即可将
df
的输出作为一个表来准备,您所做的工作相当不错。唯一的调整(可选,但有帮助)是使用快速
sed
替换
“Mounted on”
替换为
“Mounted\u on”
awk
提供一致数量的字段,然后设置表格
“宽度=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
然后在旧版本的Thunderbird中进行检查,您会发现
df
信息的表格输出,例如:

检查一下,让我知道这是否是您正在尝试的,以及您是否能够在您的命令行邮件程序版本中找到
-a
(attach)选项(如果没有,我建议您检查发行版是否提供了
s-nail
herigroum-mailx
。对于一个小软件包,这两种实现提供了强大的命令行邮件功能)

编辑每个请求,将其编码为消息正文中的
“text/html”

这在很大程度上取决于您拥有的
mail/mailx/s-nail
软件包。使用
s-nail
(通常别名为
mailx
),使用
-M
选项,您可以为电子邮件正文的
stdin
上接收的文本指定
内容类型。在这种情况下,您只需将
“$tmp”
重定向到您的邮件命令,同时将
-M“text/html”
指定为选项,例如,将上面的最后一行更改为:

 mailx -M "text/html" -s "wizard df redir -M" david@nirvana < "$tmp"
因此,在这种情况下,您可能需要重新写入邮件标题,或者手动创建邮件正文,包括邮件的表部分的
内容类型
,类似于:

Content-Type: text/html; charset=us-ascii
(或者您的
字符集应该是什么)


这就是为什么我建议,如果你不使用基于
s-nail
mail/mailx
,那么去看看你的发行版是否提供了
s-nail
软件包,或者它甚至值得从源代码开始构建,并放入
/usr/local/bin

@davis herring..对不起,这是关闭这个问题的原因对任何重复问题中未提及的一些
mailx
的新功能进行了详细说明。将此作为dup关闭将防止任何先前问题的访问者了解到,当前的Herigroum mailx实现包含
-M
选项,允许用户指定
内容类型(例如
“text/html”
)对于从
stdin
重定向的正文文本,s-nail
是现代Linux系统上伪装为
mailx
的所有包中最活跃/最新的。感谢您的帮助。我需要在电子邮件正文内容中输出。可能吗?我确信可能,我尝试将其转储到电子邮件正文中,但没有设置
内容类型
手动操作,只会在正文中留下html作为纯文本。具有讽刺意味的是,他关于需要设置内容类型的回答是正确的,但对于您的
邮件版本,a
(幸运的)正在查找附件(这就是您收到的文件未找到的原因)。如果您有
s-nail
,您可以使用
-M
选项将
stdin
的内容指定为
text/html
,没有该选项需要更多的时间-您的
邮件是什么将“text/plain”
改为
“text/html”
。如果是我,我会下载当前版本并构建它,然后将其放入
/usr/local/bin
中。如果您在系统上查看
man-mailx
,我怀疑手册页的结尾描述了
herigroup-mailx 2010
。Opensuse拥有
mailx-12.5-25
,并且没有任何从
stdin指定内容类型的能力。是的..你是对的。。。
 mailx -M "text/html" -s "wizard df redir -M" david@nirvana < "$tmp"
 type/subtype      extension [extension . . .]
Content-Type: text/html; charset=us-ascii