
每天我都會在路由器上執行腳本來檢查特定伺服器的流量使用情況。該腳本工作正常,透過腳本的輸出部分,我得到以下結果:
#Give output
printf "Traffic Report for all Servers"; printf "%10s\n"
echo -e ""
printf "## Traffic Server 1 ##"; printf "%10s\n"
echo "--------------------------------------"
printf "Traffic User1 :"; printf "%15s\n" "1200.00 GB"
printf "Traffic Client123:"; printf "%12s\n" "385.00 GB"
printf "Traffic Max:"; printf "%18s\n" "0 GB"
printf "Traffic Smith:"; printf "%16s\n" "987.00 GB"
printf "Traffic Johanna:"; printf "%14s\n" "30.00 GB"
printf "Traffic Other:"; printf "%16s\n" "8.97 GB"
echo "--------------------------------------"
printf "Traffic Gesamt DE:"; printf "%12s\n" "1524.00 GB"
printf "Traffic Quota DE:"; printf "%13s\n" "2000.00 GB"
printf "Traffic Rest DE:"; printf "%14s\n" "500.00 GB"
Traffic Report for all Servers
## Traffic Server 1 ##
--------------------------------------
Traffic User1 : 1200.00 GB
Traffic Client123: 385.00 GB
Traffic Max: 0 GB
Traffic Smith: 987.00 GB
Traffic Johanna: 30.00 GB
Traffic Other: 8.97 GB
--------------------------------------
Traffic Gesamt DE: 1524.00 GB
Traffic Quota DE: 2000.00 GB
Traffic Rest DE: 500.00 GB
到目前為止,一切都是正確的,我想確切地看到這個輸出。但是如果我使用腳本透過 ssmtp 透過電子郵件發送此輸出
#!/bin/sh
#set -x
#Give output
{
printf "Traffic Report for all Servers"; printf "%10s\n"
echo -e ""
printf "## Traffic Server 1 ##"; printf "%10s\n"
echo "--------------------------------------"
printf "Traffic User1 :"; printf "%15s\n" "1200.00 GB"
printf "Traffic Client123:"; printf "%12s\n" "385.00 GB"
printf "Traffic Max:"; printf "%18s\n" "0 GB"
printf "Traffic Smith:"; printf "%16s\n" "987.00 GB"
printf "Traffic Johanna:"; printf "%14s\n" "30.00 GB"
printf "Traffic Other:"; printf "%16s\n" "8.97 GB"
echo "--------------------------------------"
printf "Traffic Gesamt DE:"; printf "%12s\n" "1524.00 GB"
printf "Traffic Quota DE:"; printf "%13s\n" "2000.00 GB"
printf "Traffic Rest DE:"; printf "%14s\n" "500.00 GB"
} | ssmtp -F Sender [email protected]
#End
結果看起來完全不同,與終端中的輸出相同。
Traffic Report for all Servers
## Traffic Server 1 ##
--------------------------------------
Traffic User1 : 1200.00 GB
Traffic Client123: 385.00 GB
Traffic Max: 0 GB
Traffic Smith: 987.00 GB
Traffic Johanna: 30.00 GB
Traffic Other: 8.97 GB
--------------------------------------
Traffic Gesamt DE: 1524.00 GB
Traffic Quota DE: 2000.00 GB
Traffic Rest DE: 500.00 GB
很奇怪,我剛剛發現,如果我將電子郵件中的文字複製到此處的此文字框,文字會正確對齊,但我只是在電子郵件中看到它,如上面所示。
有誰知道如何獲得與電子郵件中相同樣式的輸出?謝謝
答案1
很奇怪,我剛剛發現,如果我將電子郵件中的文字複製到此處的此文字框,文字會正確對齊,但我只是在電子郵件中看到它,如上面所示。
文字是純文本,其中“格式”是透過連續空格完成的。沒有任何資訊表明某些部分應該向右對齊。右側部分之前只有空格。如果字體是 a,空格可以讓它很好地向右對齊固定寬度字體。
終端和終端模擬器通常使用固定寬度字體。這樣不僅可以正確顯示像您這樣的文字;簡單的盒子可以畫出mc
,可以繪製更複雜的佈局(如 的介面)。如果渲染不同寬度的字符,可能會破壞佈局(例子)。
使用程式碼的GUI 程式使用固定寬度字體(因為縮排、字串和程式碼通常這樣看起來更好,我們透過經驗知道這一點),但通用GUI 程式通常使用可變寬度字體(因為文獻看起來更好)方式)。顯然,您的電子郵件用戶端使用可變寬度字體向您顯示純文字。
在有問題的電子郵件中,所有空格都在那裡;如果將文字貼到終端,它將正確對齊;問題是當您查看電子郵件時,空格不像字母和數字那麼寬(並且某些字母不像其他字母那麼寬)。
即使在這裡我們也可以看到差異1。網站對程式碼區塊使用固定寬度的字體:
Example 1
Traffic Client123: 385.00 GB
Traffic Max: 0 GB
它對文字使用可變寬度字體:
範例 2
流量 Client123:385.00 GB
最大流量:0 GB
情況可能更糟。在範例 2 中,我將常規 ASCII 空格替換為不間斷空格,因為該網站將連續的常規空格視為一個,如果我不進行抵消,那麼它會如下所示:
範例 3
流量 Client123:385.00 GB
最大流量:0 GB
您的電子郵件用戶端可能不會壓縮連續空格,它會像範例 2 中那樣呈現文字。
將您的電子郵件用戶端配置為對純文字使用固定寬度字體。如果您不能或不想,則需要將電子郵件中未對齊的文字貼到文字編輯器中才能享受對齊效果。如果配置為使用固定寬度字體,它可能是 GUI 編輯器;或者基本上是終端模擬器中的任何文字編輯器(除非您的終端模擬器本身配置為使用可變寬度字體,但這不太可能)。
或者,如果您的電子郵件用戶端可以呈現 HTML 格式的電子郵件,請修改您的腳本以傳送 HTML 而不是純文字。我相信你可以在 HTML 中指定字體(顯然在這種情況下你需要固定寬度的字體);或者您可以使用指令而不是空格進行對齊。我不太了解 HTML,但我發現了這個:如何在同一行中將文字左對齊和右對齊?請注意,您的選項受到電子郵件用戶端可以解釋的限制。
1不同系統的不同瀏覽器可能使用不同的字體;另外,瀏覽器可以配置為使用與所要求的網站不同的字體。因此,您可能會也可能不會按照我想要的方式看到我的範例。以防萬一,下面的螢幕截圖顯示了範例的外觀(單擊查看完整尺寸):