.png)
Jeden Tag führe ich ein Skript auf meinem Router aus, um die Datenverkehrsnutzung eines bestimmten Servers zu überprüfen. Das Skript funktioniert einwandfrei und mit diesem Ausgabeteil des Skripts erhalte ich folgendes Ergebnis:
#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
Soweit ist alles richtig, ich möchte genau diese Ausgabe sehen. Aber wenn ich das Skript verwende, um diese Ausgabe per E-Mail mit ssmtp zu versenden
#!/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
Das Ergebnis sieht völlig anders aus, als die Ausgabe im Terminal.
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
Es ist seltsam, ich habe gerade festgestellt, dass wenn ich den Text aus der E-Mail in dieses Textfeld hier kopiere, der Text zwar richtig ausgerichtet ist, ich ihn in der E-Mail aber nur wie oben sehe.
Hat jemand eine Idee, wie man den gleichen Stil wie in der E-Mail erhält? Danke
Antwort1
Es ist seltsam, ich habe gerade festgestellt, dass wenn ich den Text aus der E-Mail in dieses Textfeld hier kopiere, der Text zwar richtig ausgerichtet ist, ich ihn in der E-Mail aber nur wie oben sehe.
Der Text ist einfacher Text, bei dem die „Formatierung“ durch aufeinanderfolgende Leerzeichen erfolgt. Es gibt keine Informationen darüber, dass ein Teil rechtsbündig ausgerichtet werden soll. Es gibt nur Leerzeichen, die dem rechten Teil vorangehen. Die Leerzeichen sorgen dafür, dass der Text gut rechtsbündig ausgerichtet wird, wenn die Schriftart eineSchriftart mit fester Breite.
Terminals und Terminalemulatoren verwenden häufig Schriftarten mit fester Breite. Auf diese Weise kann nicht nur ein Text wie Ihr Text korrekt angezeigt werden; einfache Kästchenkann gezeichnet werdenkönnen komplexere Layouts (wie die Schnittstelle von mc
) gezeichnet werden. Wenn ein Zeichen mit einer anderen Breite gerendert wird, kann dies das Layout beschädigen (Beispiel).
GUI-Programme, die mit Code arbeiten, verwenden Schriftarten mit fester Breite (weil Einrückungen, Zeichenfolgen und Code im Allgemeinen so besser aussehen, das wissen wir aus Erfahrung), aber allgemeine GUI-Programme verwenden normalerweise Schriftarten mit variabler Breite (weil Literatur so besser aussieht). Offenbar verwendet Ihr E-Mail-Client eine Schriftart mit variabler Breite, um Ihnen einfachen Text anzuzeigen.
In der betreffenden E-Mail sind alle Leerzeichen vorhanden. Wenn Sie den Text in ein Terminal einfügen, wird er richtig ausgerichtet. Das Problem besteht darin, dass Leerzeichen beim Anzeigen der E-Mail nicht so breit sind wie Buchstaben und Ziffern (und einige Buchstaben nicht so breit sind wie andere).
Wir können den Unterschied sogar hier sehen 1 . Diese Site verwendet eine Schriftart mit fester Breite für Codeblöcke:
Example 1
Traffic Client123: 385.00 GB
Traffic Max: 0 GB
Für den Text wird eine Schriftart mit variabler Breite verwendet:
Beispiel 2
Datenverkehr Client123: 385,00 GB
Datenverkehr Max: 0 GB
Es kann sogar noch schlimmer sein. Im Beispiel 2 habe ich normale ASCII-Leerzeichen durch geschützte Leerzeichen ersetzt, da die Site aufeinanderfolgende normale Leerzeichen als ein einziges behandelt und es, wenn ich nichts dagegen unternehmen würde, so aussehen würde:
Beispiel 3
Datenverkehr Client123: 385,00 GB
Datenverkehr Max: 0 GB
Ihr E-Mail-Client komprimiert aufeinanderfolgende Leerzeichen wahrscheinlich nicht, sondern stellt den Text wie in Beispiel 2 dar. Die Ausrichtung ist jedoch dennoch nicht wie in Beispiel 1.
Konfigurieren Sie Ihren E-Mail-Client so, dass er für einfachen Text eine Schriftart mit fester Breite verwendet. Wenn Sie das nicht können oder wollen, müssen Sie falsch ausgerichteten Text aus E-Mails in einen Texteditor einfügen, um die Ausrichtung wiederherzustellen. Dies kann ein GUI-Editor sein, wenn er für die Verwendung einer Schriftart mit fester Breite konfiguriert ist; oder grundsätzlich jeder Texteditor in einem Terminalemulator (es sei denn, Ihr Terminalemulator selbst ist für die Verwendung einer Schriftart mit variabler Breite konfiguriert, was jedoch unwahrscheinlich ist).
Alternativ können Sie, wenn Ihr E-Mail-Client E-Mails im HTML-Format wiedergeben kann, Ihr Skript so ändern, dass es HTML statt einfachem Text sendet. Ich glaube, Sie können die Schriftart in HTML angeben (in diesem Fall möchten Sie natürlich eine Schriftart mit fester Breite); oder Sie können die Ausrichtung mithilfe von Anweisungen und nicht mit Leerzeichen vornehmen. Ich kenne mich nicht wirklich mit HTML aus, aber ich habe Folgendes gefunden:Wie kann ich Text linksbündig und Text rechtsbündig in derselben Zeile ausrichten?Beachten Sie, dass Ihre Optionen durch die Interpretationsmöglichkeiten Ihres E-Mail-Clients eingeschränkt sind.
1 Verschiedene Browser in verschiedenen Systemen können unterschiedliche Schriftarten verwenden; außerdem kann ein Browser so konfiguriert sein, dass er eine andere Schriftart verwendet als die von der Site angeforderte. Daher können meine Beispiele möglicherweise nicht so aussehen, wie ich es beabsichtigt habe. Nur zur Sicherheit zeigt der folgende Screenshot die Beispiele so, wie sie aussehen sollen (klicken, um die volle Größe anzuzeigen):