我正在编写脚本以在服务器上获取大量信息,我们将结果输出到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
最终看起来像这样:
当然,我要寻找的是与在shell中运行cat / proc / cpuinfo所得到的内容更加内联的东西。任何帮助将不胜感激。
再次感谢。
答案 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。