如何从BASH中的变量打印多行到HTML输出

时间:2013-11-14 03:47:55

标签: html bash

我在执行一个基本上从服务器捕获磁盘空间并将结果输出到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 [@]}”

不幸的是,所有结果都是一样的。你能帮忙吗?

由于

2 个答案:

答案 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//</&lt;} </$td>"
  done
  echo -n "  </tr>"
  td="td"
done
echo "</table>"

这与上面的单行完全相同,但它为你解释了一些事情。它仍然容易出现意外的空白。

Bash不是生成HTML的理想编程环境。

答案 1 :(得分:0)

也许您需要了解一下HTML以及如何将文本格式化为表格和列?

无论如何,在您的内容之前和之后放置<pre></pre>标签,如下所示:

echo "<pre>$STORAGE</pre>"

它不会创建HTML表格,但至少你不会丢失空白