bash 스크립트 blcheck의 이메일 출력 문제

bash 스크립트 blcheck의 이메일 출력 문제

github의 Bash 스크립트 blcheck 형식에 이메일 출력 문제가 있습니다.

콘솔 출력은 올바르게 표시되지만 mailx를 통해 이메일로 전송되면 본문이 아닌 첨부 파일로 나타납니다.
33%% dnsbl.inps.de ✓
50%% xbl.spamhaus.org ✓

파일 또는 이메일로 출력 예:
16%% dnsbl-3.uceprotect.net ^MESC(BESC[m 16%% dnsbl-.uceprotect.net ✓ESC(BESC[m

파일과 이메일의 형식을 수정하는 방법을 알려주세요.

CMD가 이메일 본문으로 전송되지 않았습니다.

sh blcheck -v xx.xx.xx.xx | mail -s "server-blcheck날짜" [email protected]

스크립트:https://github.com/IntellexApps/blcheck


@john1024 및 @cas의 도움과 이전 게시물을 통해제어 문자 제거아래 cmd로 문제가 해결되었습니다.

CMD: ./blcheck-l -v xx.xx.xx.xx | perl -pe 's/\e([^[]]|[.*?[a-zA-Z]|].*?\a)//g' | col -b | mail -s "blcheck-l -v `date`" email@address

darko-poljak은 비대화형 사용에 친숙한 출력을 만들기 위한 새로운 옵션과 함께 github에 풀 요청을 제출했습니다.
https://github.com/IntellexApps/blcheck/pull/2

답변1

당신이 보고 있는 것은 ANSI 이스케이프 시퀀스입니다. blcheck표시된 텍스트의 색상을 변경하는 데 사용됩니다 .터미널에서. 아시다시피 이메일에서는 작동하지 않습니다.

영구적으로 삭제하려면 blcheck즐겨 사용하는 편집기를 사용하여 스크립트를 편집하세요. 다음 줄을 찾으세요.

RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
CLEAR=$(tput sgr0)

다음 줄을 다음으로 바꿉니다.

RED=
GREEN=
YELLOW=
CLEAR=

이렇게 하면 blcheck애초에 ANSI 시퀀스가 ​​추가되는 것을 방지할 수 있습니다.

보다 유연한 접근 방식

터미널(ANSI) 또는 파이프(ANSI 없음)에서 코드가 작동하도록 만들 수 있습니다. 다음 코드는 stdout이 터미널인지 테스트합니다. 그렇다면 색상 변수를 원하는 ANSI 시퀀스로 설정합니다. 터미널이 아닌 경우 ANSI 시퀀스가 ​​생성되지 않습니다.

RED=
GREEN=
YELLOW=
CLEAR=
if [ -t 1 ]
then
    RED=$(tput setaf 1)
    GREEN=$(tput setaf 2)
    YELLOW=$(tput setaf 3)
    CLEAR=$(tput sgr0)
fi

관련 정보