我在执行一个基本上从服务器捕获磁盘空间并将结果输出到html页面的脚本时遇到问题。
STORAGE = $(df -PTh | column -t | sort -n -k6n)
STDOUT中的输出正常。它的格式很好。当我将变量回显到HTML页面时,输出变为一行,就像这一行:
/ dev / vx / dsk / localdg / wm7x01 vxfs 30G 21G 9.3G 70%/ apps / wm7x01 / dev / mapper / vg00-vrts ext3 6.9G 4.7G 2.3G 68%/ vrts_install / dev / mapper / vg00- ora11g_cli ext3 7.7G 4.1G 3.3G 57%/ usr / oracle11g_cli / dev / mapper / vg00-repackage ext3 1008M 423M 586M 42%/ var / spool / repackage / dev / vx / dsk / cfs_dcgnts_dg / shared vxfs 220G 91G 130G 42% /应用/共享
我甚至尝试使用引文:echo“$ STORAGE”
我也尝试过使用array:echo“{STORAGE [@]}”
不幸的是,所有结果都是一样的。你能帮忙吗?
由于
答案 0 :(得分:0)
快速,丑陋的黑客:
STORAGE=$(df -PTh | column -t | sort -n -k6n | sed 's:$:<br/>:')
这会在每一行的末尾添加换行符...但不会将其格式化为表格。为此,这是另一个快速,丑陋的黑客:
STORAGE="<table>$(df -PTh | column -t | sort -n -k6n | sed 's:$:<br/>:;s: *:</td><td>:;s:.*:<tr><td>&</td></tr>:')</table>"
这将使用必要的HTML替换一个或多个空格的所有出现以分割列,然后向每行添加表行包装,最后将整个输出包装在HTML <table>
标记中。
我再说一次:这是一个丑陋的黑客。它应该在大部分时间处于紧凑状态,但如果你还有其他任何添加空格的东西,例如设备名称或文件系统名称,它肯定会中断。 (曾经安装过一个有空间的USB记忆棒吗?)
请注意,这个丑陋的黑客不会使用特定于bash的任何内容。你可以在更传统的Bourne风格的贝壳中轻松完成。
另一种可能性,也许更容易,只是将此文本标记为预先格式化(即它):
STORAGE="<pre>$(df -PTh | column -t | sort -n -k6n)</pre>"
最后,如果你想用这个来搞定所有并使用数组,这是一个例子:
#!/usr/local/bin/bash
mapfile -t a_storage < <(df -PTh | column -t | sort -n -k6n)
td="th"
echo -n "<table>"
for line in "${a_storage[@]}"; do
a_line=($line)
echo "<tr>"
for field in ${a_line[@]}; do
echo " <$td> ${field//</<} </$td>"
done
echo -n " </tr>"
td="td"
done
echo "</table>"
这与上面的单行完全相同,但它为你解释了一些事情。它仍然容易出现意外的空白。
Bash不是生成HTML的理想编程环境。
答案 1 :(得分:0)
也许您需要了解一下HTML以及如何将文本格式化为表格和列?
无论如何,在您的内容之前和之后放置<pre>
和</pre>
标签,如下所示:
echo "<pre>$STORAGE</pre>"
它不会创建HTML表格,但至少你不会丢失空白