cpuinfo的BASH格式化输出

时间:2019-02-27 18:07:12

标签: html bash formatting

我正在编写脚本以在服务器上获取大量信息,我们将结果输出到html文件。工作到一定程度。抓住cpuinfo时,我被卡住了。它抓住它并将其转储到我想要的位置,但是它没有像在shell中那样被格式化。我已经尝试使用sed,但是也许我没有很好地使用它,并且我尝试了使用列,但似乎没有任何效果。我一直在说话。请在下面查看我的代码以及它的输出方式。...

谢谢

#!/bin/bash

# Define global variables
HOSTNAME=`uname -n`
TITLE="System Information for "
CPUINFO=`cat /proc/cpuinfo`


cat <<- EOF > /tmp/grab_server_info.html
<html>
<head>
    <title>
    $TITLE $HOSTNAME
    </title>
</head>

<body>
    <h1>$HOSTNAME</h1>
    <p>Last run on $(date +"%c") by $USER</p>
    <h3>UPTIME</h3>
    <p>$(uptime)</p>
    <h3>CPU Information</h3>
    <p>$CPUINFO</p>
</body>
</html>
EOF

最终看起来像这样:

enter image description here

当然,我要寻找的是与在shell中运行cat / proc / cpuinfo所得到的内容更加内联的东西。任何帮助将不胜感激。

再次感谢。

2 个答案:

答案 0 :(得分:2)

您要使用<pre> element

  

HTML <pre>元素表示预格式化的文本,该文本的显示方式应与HTML文件中的内容完全相同。通常使用非比例(“等宽字体”)字体呈现文本。此元素内的空白显示为书面形式。

<h3>CPU Information</h3>
<pre>$CPUINFO</pre>

示例:

<pre>
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
</pre>

或者,您可以处理输出以从中生成实际的HTML表。

答案 1 :(得分:1)

使用<pre>当然是最简单的方法-它比我的建议更能应付流氓符号,当它起作用时,它看起来似乎更好:用表标签装饰$ CPUINFO的输出的每一行以获取更加灵活的布局:

  • 在之前插入<table border = "1">
  • 每行的开头变为<tr><td>
  • 冒号变为</td><td>
  • 行尾变为</td></tr>
  • 在之后插入</table>

这是快速的sed,例如:

cat /proc/cpuinfo| sed -E 's/^([^:]*):(.*)$/<tr><td>\1<\/td><td>\2<\/td><\/tr>/'

如果您担心正文中的不可打印内容,则可以用<pre>标签将每个小节括起来。

还请注意,如果您有多个处理器,则列表可能会很长(超过80个处理器),并且除cpu MHz之外的每个字段都相同,因此您可以考虑将它们合并到更多确实有所不同的列中。不过,那将是非常毛茸茸的html。