簡體   English   中英

如何從BASH中的變量打印多行到HTML輸出

[英]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//</&lt;} </$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM