스크립트 출력을 파일로 리디렉션할 때 tput 이스케이프 시퀀스 방지

스크립트 출력을 파일로 리디렉션할 때 tput 이스케이프 시퀀스 방지

사용할 수 있는 쉘 기능이 있습니다 tput.

color=$( tput setaf 1 )
normal=$( tput sgr0 )
colorize() {
    echo "${color}$1$(normal)"
}

함수를 호출하면 터미널에 예상대로 파일 이름이 색상으로 표시됩니다.

$ myScript.sh .
/path/to/dir # (in color red)

그런 다음 출력을 파일로 리디렉션하면 다음과 같습니다.

$ myScript.sh > /tmp/file.log

file.log여전히 이스케이프 시퀀스를 포함합니다. 예:

^[[36m~/path/to/my/file/^[(B^[[[m

이는 다음과 관련이 있을 수 있습니다.학기그리고정보 컴퓨팅, 터미널은 이스케이프 시퀀스를 어떻게 해석합니까?

아이디어는 "비 디스플레이" 터미널을 에뮬레이트하는 것입니다. 그렇지 않습니까?

내 용어는 (Ubuntu 16.04)입니다.

$ echo $TERM
xterm

tput스크립트가 파일로 리디렉션될 때 이러한 이스케이프 시퀀스를 방지하려면 어떻게 해야 합니까?

해결 방법: 내 스크립트에 옵션을 추가하여 다음 lsgrep같은 색상을 수동으로 비활성화합니다 --color=none.

답변1

간단히 말해서, tput은 이 작업을 수행하지 않습니다.

더 길다: 스크립트가 이를 수행할 수 있습니다.

예를 들어 표준 출력이 터미널인지 확인합니다.

if [ -t 1 ]
then
    color=$( tput setaf 1 )
    normal=$( tput sgr0 )
else
    color=""
    normal=""
fi

관련 정보