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