사용할 수 있는 쉘 기능이 있습니다 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
스크립트가 파일로 리디렉션될 때 이러한 이스케이프 시퀀스를 방지하려면 어떻게 해야 합니까?
해결 방법: 내 스크립트에 옵션을 추가하여 다음 ls
과 grep
같은 색상을 수동으로 비활성화합니다 --color=none
.
답변1
간단히 말해서, tput은 이 작업을 수행하지 않습니다.
더 길다: 스크립트가 이를 수행할 수 있습니다.
예를 들어 표준 출력이 터미널인지 확인합니다.
if [ -t 1 ]
then
color=$( tput setaf 1 )
normal=$( tput sgr0 )
else
color=""
normal=""
fi