如何将BASH命令输出文本转换为格式与原输出一致的HTML报告
如何将BASH命令输出文本转换为格式与原输出一致的HTML报告
嗨,这个问题我之前也碰到过!HTML默认会把连续的空白字符(换行、空格、制表符)都合并成一个空格,所以你的systemctl status ddos.service输出才会在HTML里挤成一行。下面给你几个实用的解决办法,按需选择就行:
方法1:用HTML <pre> 标签保留原始格式
<pre> 标签专门用来展示预格式化的文本,会完整保留原内容的换行、缩进和空格。
脚本生成示例:
如果你是用脚本自动生成HTML报告,可以把命令输出包裹在<pre>标签里。注意要转义HTML特殊字符(比如<、>、&),避免破坏HTML结构:
# 提取命令输出并转义特殊字符 service_status=$(systemctl status ddos.service | sed -e 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g') # 生成带<pre>标签的HTML内容 cat > report.html <<EOF <!DOCTYPE html> <html> <body> <h1>DDOS Service Status Report</h1> <pre>$service_status</pre> </body> </html> EOF
这样生成的HTML里,命令输出会和bash里显示的格式完全一致。
方法2:用CSS white-space: pre-wrap 实现自适应格式
如果你希望文本能自动适应容器宽度(不会横向滚动),同时保留换行和缩进,可以给容器元素加上white-space: pre-wrap的CSS样式:
手动/脚本生成示例:
<!DOCTYPE html> <html> <body> <h1>DDOS Service Status Report</h1> <div style="white-space: pre-wrap; font-family: monospace;"> $(systemctl status ddos.service | sed -e 's/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/'"'"'/\'/g') </div> </body> </html>
加上font-family: monospace还能让文本和bash里的等宽字体一致,观感更还原。
方法3:用aha工具一键转换(保留ANSI颜色)
如果你的bash输出带有颜色(比如systemctl的绿色运行状态、红色错误提示),可以用aha工具直接把带ANSI颜色的输出转换成带样式的HTML,格式和颜色都会完美还原。
使用步骤:
- 先安装
aha(不同系统命令不同):- Debian/Ubuntu:
sudo apt install aha - RHEL/CentOS:
sudo dnf install aha
- Debian/Ubuntu:
- 直接转换输出到HTML:
systemctl status ddos.service | aha > report.html
生成的HTML不仅格式和bash一致,连原输出的颜色都会保留,非常直观。
备注:内容来源于stack exchange,提问作者M. Fachrizal Utama
相关产品推荐
相关产品推荐

