.png)
Каждый день я запускаю скрипт на своем маршрутизаторе, чтобы проверить использование трафика определенного сервера. Скрипт работает нормально, и с этой частью вывода скрипта я получаю следующий результат:
#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
Странно, я только что обнаружил, что если я копирую текст из письма в это текстовое поле, текст выравнивается правильно, но я вижу его в письме, как показано выше.
Текст представляет собой обычный текст, где «форматирование» осуществляется последовательными пробелами. Нет информации о том, что какая-то часть должна быть выровнена по правому краю. Есть только пробелы, предшествующие правой части. Пробелы делают его красиво выровненным по правому краю, если шрифтшрифт фиксированной ширины.
Терминалы и эмуляторы терминалов обычно используют шрифты фиксированной ширины. Таким образом, не только текст, как ваш, может отображаться правильно; простые поляможно нарисовать, можно рисовать более сложные макеты (например, интерфейс mc
). Если отображается символ другой ширины, это может нарушить макет (пример).
Программы GUI, работающие с кодом, используют шрифты фиксированной ширины (потому что отступы, строки и код в целом выглядят лучше, мы знаем это по опыту), но программы GUI общего назначения обычно используют шрифты переменной ширины (потому что литература выглядит лучше). По-видимому, ваш почтовый клиент использует шрифт переменной ширины, чтобы показывать вам простой текст.
В рассматриваемом электронном письме все пробелы присутствуют; если вы вставите текст в терминал, то он будет выровнен правильно; проблема в том, что пробелы не такие широкие, как буквы и цифры (а некоторые буквы не такие широкие, как другие) при просмотре электронного письма.
Мы можем увидеть разницу даже здесь 1. Этот сайт использует шрифт фиксированной ширины для кодовых блоков:
Example 1
Traffic Client123: 385.00 GB
Traffic Max: 0 GB
Для текста используется шрифт переменной ширины:
Пример 2
Трафик Client123: 385,00 ГБ
Трафик Макс: 0 ГБ
Может быть даже хуже. В примере 2 я заменил обычные пробелы ASCII на неразрывные пробелы, потому что сайт воспринимает последовательные обычные пробелы как один, и если бы я не противодействовал, то это выглядело бы так:
Пример 3
Трафик Client123: 385,00 ГБ
Трафик Макс: 0 ГБ
Ваш почтовый клиент, вероятно, не сжимает последовательные пробелы, он отображает текст, как в примере 2. Но выравнивание все равно не такое, как в примере 1.
Настройте свой почтовый клиент на использование шрифта фиксированной ширины для обычного текста. Если вы не можете или не хотите, вам придется вставлять невыровненный текст из писем в текстовый редактор, чтобы насладиться выравниванием. Это может быть редактор GUI, если он настроен на использование шрифта фиксированной ширины; или, по сути, любой текстовый редактор в эмуляторе терминала (если только сам эмулятор терминала не настроен на использование шрифта переменной ширины, хотя это маловероятно).
В качестве альтернативы, если ваш почтовый клиент может отображать электронные письма в формате HTML, измените свой скрипт для отправки HTML вместо обычного текста. Я полагаю, что вы можете указать шрифт в HTML (очевидно, в этом случае вам нужен шрифт фиксированной ширины); или вы можете выровнять с помощью директив, а не пробелов. Я не очень хорошо знаю HTML, но я нашел это:Как выровнять текст по левому и правому краю в одной строке?Обратите внимание, что ваши возможности ограничены возможностями интерпретации вашего почтового клиента.
1 Разные браузеры в разных системах могут использовать разные шрифты; кроме того, браузер может быть настроен на использование шрифта, отличного от запрошенного сайтом. Поэтому вы можете увидеть мои примеры в том виде, в котором я их задумал, а можете и не увидеть. На всякий случай, на скриншоте ниже показаны примеры в том виде, в котором они должны выглядеть (кликните, чтобы увидеть полный размер):