[英]How to print multiple line from variable in BASH to HTML output
我在執行一個腳本時遇到了問題,該腳本基本上從服務器捕獲了磁盤空間並將結果輸出到html頁面。
存儲= $(df -PTh |列-t |排序-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.7 G 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%/ apps /共享
我什至嘗試使用引號:echo“ $ STORAGE”
我也嘗試使用數組:echo“ {STORAGE [@]}”
不幸的是,所有結果都相同。 你能幫忙嗎?
謝謝
快速,丑陋的駭客:
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>
標記中。
我再說一遍: 這是一個丑陋的hack 。 它應該大部分時間都可以正常工作,但是如果您還有其他添加空格的地方(例如設備名稱或文件系統名稱),肯定會中斷。 (是否安裝了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的理想編程環境。
也許您需要稍微了解一下HTML,以及如何將文本格式化為表格和列?
無論如何,在內容之前和之后放置<pre>
和</pre>
標簽,如下所示:
echo "<pre>$STORAGE</pre>"
它不會創建HTML表,但至少不會丟失空格
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.