..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.00GB
트래픽 최대: 0GB
상황은 더욱 악화될 수 있습니다. 예제 2에서는 사이트가 연속된 일반 공백을 하나로 처리하고 이에 대응하지 않으면 다음과 같이 표시되므로 일반 ASCII 공백을 줄바꿈 없는 공백으로 대체했습니다.
예 3
트래픽 Client123: 385.00GB
트래픽 최대: 0GB
귀하의 이메일 클라이언트는 아마도 연속된 공백을 압축하지 않고 예제 2와 같이 텍스트를 렌더링합니다. 여전히 정렬은 예제 1과 다릅니다.
일반 텍스트에 고정 너비 글꼴을 사용하도록 전자 메일 클라이언트를 구성합니다. 할 수 없거나 원하지 않는 경우 전자 메일의 잘못 정렬된 텍스트를 텍스트 편집기에 붙여넣어 정렬을 즐겨야 합니다. 고정 너비 글꼴을 사용하도록 구성된 경우 GUI 편집기일 수 있습니다. 또는 기본적으로 터미널 에뮬레이터의 텍스트 편집기입니다(터미널 에뮬레이터 자체가 가변 너비 글꼴을 사용하도록 구성되지 않은 한, 그럴 가능성은 낮습니다).
또는 이메일 클라이언트가 HTML 형식의 이메일을 렌더링할 수 있는 경우 일반 텍스트 대신 HTML을 보내도록 스크립트를 수정하세요. 나는 HTML에서 글꼴을 지정할 수 있다고 생각합니다(분명히 이 경우에는 고정 너비 글꼴이 필요합니다). 또는 공백이 아닌 지시문을 사용하여 정렬할 수 있습니다. 나는 HTML을 잘 모르지만 다음을 발견했습니다.같은 줄에서 텍스트를 왼쪽에 정렬하고 텍스트를 오른쪽에 정렬하려면 어떻게 해야 합니까?옵션은 이메일 클라이언트가 해석할 수 있는 내용에 따라 제한됩니다.
1 다른 시스템의 다른 브라우저는 다른 글꼴을 사용할 수 있습니다. 또한 요청한 사이트와 다른 글꼴을 사용하도록 브라우저를 구성할 수도 있습니다. 그러므로 여러분은 내가 의도한 방식으로 내 예제를 볼 수도 있고 그렇지 않을 수도 있습니다. 만약을 대비해 아래 스크린샷은 의도된 대로 예제를 보여줍니다(전체 크기를 보려면 클릭하세요).