cron 작업의 tput이 굵은 텍스트를 출력하지 않습니다.

cron 작업의 tput이 굵은 텍스트를 출력하지 않습니다.

돌아왔을 때 아주 이상한 행동을 했어

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같은 모양이 되며 , (및 대부분의 최신 터미널 에뮬레이터) 에서 인식되는 시퀀스는 굵은 글씨로 시작하여 로 작성됩니다 . 에서 실행되면 대신 전송 됩니다 .xtermxterm-256colortput bold\e[1mxtermhpterm\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로 표시됩니다.

관련 정보