아래와 같은 작은 스크립트가 있는데 문제가 발생하면 출력이 화면에 빨간색, 노란색 등으로 강조 표시됩니다.
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}/"