형식 문제

형식 문제

아래와 같은 작은 스크립트가 있는데 문제가 발생하면 출력이 화면에 빨간색, 노란색 등으로 강조 표시됩니다.

normal=$(tput sgr0)
red=$(tput setaf 1)
yellow=$(tput setaf 3)

df -h >/dev/null 2>&1 &
xx_pid=$!
sleep 3
if [ `ps -ef| grep $xx_pid | grep -v grep | wc -l` -gt 0 ]; then
kill $xx_pid > /dev/null 2>&1
 printf "%-70s %s\n" "${red}df -h response : "  "  ......... taking more  than 30 Seconds to complete, exiting script${normal}" | tee -a $log
 exit
else
 printf "%-70s %s\n" "df -h response : "  " ......... NORMAL (Completed in  less than 30sec)" | tee -a $log
 fi

하지만 로그 파일에는 다음과 같은 정크 문자가 표시됩니다([31m 및 (B[m )

[31mdf -h response :                    ......... taking more than 30 Seconds to complete, exiting script(B[m

로그 파일에 쓰지 않고 이러한 정크 문자를 방지할 수 있는 방법이 있습니까?

답변1

사용할 필요가 없습니다 tee. 메시지를 변수에 할당하고printf 저것색상을 사용하고,그 다음에로그 파일에 메시지를 추가합니다.

 msg=$(printf "%-70s %s" "df -h response : "  " ......... NORMAL (Completed in >
 printf "%s%s%s\n" "${red}" "$msg" "${normal}"
 printf "%s\n" "$msg" >>$log

대신에

 printf "%-70s %s\n" "${red}df -h response : "  "  ......... taking more  than 30 Seconds to complete, exiting script${normal}" | tee -a $log

문제는 tee표준 출력에만 쓸 수 있다는 것입니다. 너할 수 있다stdout을 별도로 리디렉션하려면 스크립트에 무언가를 수행해야 하지만 번거롭습니다.

 ( printf "%-70s %s\n" "df -h response : "  "  ......... taking more  than 30 Seconds to complete, exiting script" | tee -a $log ) | sed -e "s/^/${red}/" -e "s/$/${normal}/"

관련 정보