돌아왔을 때 아주 이상한 행동을 했어
Linux Redhat 시스템에서 이 명령을 실행하면
echo "$(tput bold)" start write to log "$(tput sgr0)" >> /tmp/log.txt
우린 끝났어볼드체존재하다/tmp/log.txt
more /tmp/log.txt
start write to log <----- BOLD TEXT
하지만 /etc/cron.d 아래의 cron 작업에서 실행하면
*/1 * * * * root [[ -f /home/mng_log.sh ]] && echo "$(tput bold)" start write to log "$(tput sgr0)" >> /tmp/log.txt
그러면 텍스트가 /tmp/log.txt
굵게 표시되지 않습니다
cron 작업의 cli가 굵은 테스트를 작성하지 않는 이유는 무엇입니까?
답변1
tput bold
알려주는 데 사용되는 문자 순서를 작성하세요.현재 터미널실행 중이며 굵게 시작됩니다.
환경 변수의 값을 기반으로 터미널 유형을 알고 있습니다 $TERM
. 이 변수는 터미널 에뮬레이터 또는 getty
.
tput
특정 터미널 유형의 특정 속성에 사용할 시퀀스를 알아보기 위한 쿼리 termcap
또는 데이터베이스입니다.terminfo
예를 들어, 에서 실행하는 경우 xterm
또는 와 $TERM
같은 모양이 되며 , (및 대부분의 최신 터미널 에뮬레이터) 에서 인식되는 시퀀스는 굵은 글씨로 시작하여 로 작성됩니다 . 에서 실행되면 대신 전송 됩니다 .xterm
xterm-256color
tput bold
\e[1m
xterm
hpterm
\e&dB
스크립트가 에서 실행되면 cron
터미널에서 실행되지 않습니다. 굵은 속성을 활성화하기 위해 시퀀스를 보내려면 $TERM
환경 변수를 설정하여 어떤 터미널이어야 하는지 알려야 합니다.
어쩌면 다음과 같은 것일 수도 있습니다.
export TERM="${TERM-xterm}" # set $TERM to xterm if not set
printf '%s\n' "$(tput bold)start write to log$(tput sgr0)" >> /tmp/log.txt
그런 다음 /tmp/log.txt
회전할 xterm 시퀀스가 포함됩니다.용감한존재하다. 파일 내용이 xterm 터미널 에뮬레이터로 전송되면 굵은 글씨로 표시되고 다른 터미널에서는 YMMV로 표시됩니다.