tput: $TERM에 값이 없고 -T가 지정되지 않았습니다.

tput: $TERM에 값이 없고 -T가 지정되지 않았습니다.

cron을 통해 bash 스크립트를 실행하려고 하는데 실행 시작 시 다음 오류가 발생합니다.

tput: No value for $TERM and no -T specified

이것이 내 crontab에 있는 내용입니다.

0 8 * * 1-5 cd /var/www/inv/ && /var/www/inv/unitTest run all 2>&1| mail -r "[email protected]" -s "Daily Inventory Unit Test Results" [email protected]

답변1

단위 테스트 스크립트를 호출하여 tput어떤 테스트가 통과하고 실패했는지 보여주는 멋진 출력을 생성할 수 있습니다. cron단말기가 없기 때문에 단말기 종류( $TERM) 가 없으므로 tput존재하지 않는 단말기를 제어할 방법이 없습니다.

단위 테스트 스크립트에는 두 가지 모드가 있어야 합니다.

  • 터미널에서 실행: tput좋은 출력을 생성하기 위해 호출될 수 있습니다.
  • 터미널에서 실행하지 마십시오. 호출하면 안 되지만 tput대신 여기에서 수행한 것처럼 이메일로 전달하기에 적합한 일반 일반 텍스트 출력 형식을 생성합니다.

단위 테스트가 터미널에서 실행 중인지 확인하는 가장 쉬운 방법은 터미널을 참조하는 stdio 파일 설명자를 테스트하는 것입니다. 쉘 스크립트인 경우 다음을 수행하십시오.

if [ -t 1 ]; then
    tput bold; echo pretty; tput sgr0
else
    echo ugly
fi

기본적으로 터미널에서 실행하지 않는 한 호출하지 마십시오 tput. 그러면 어떤 모드에서 실행하든 오류를 방지하고 합리적인 출력을 생성할 수 있습니다.

답변2

위의 Celada가 제공한 답변을 확장합니다(아직 다른 답변에 댓글을 달 수 있을 만큼 평판 점수가 높지 않기 때문에 댓글 대신 답변을 게시해야 합니다.)...

제안에 따르면TLDP.org[ -t 0 ], 로컬 터미널에서 작업 할 수 있지만 SSH를 통해 원격으로 호출하면 실패합니다.

따라서 소켓이 있는지도 확인해야 합니다. 아래는 터미널이나 소켓을 확인하는 예입니다.

if [[ -t 0 || -p /dev/stdin ]]
then
  echo interactive
else
  echo non-interactive
fi

관련 정보