web-dev-qa-db-ja.com

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]
4
ComputerLocus

ユニットテストスクリプトは、どのテストが成功したか失敗したかを示すきれいな出力を生成するために、おそらくtputを呼び出します。 cronの下には端末がないため、端末タイプはありません($TERM)、したがってtputは存在しない端末を制御できません。

単体テストスクリプトには、次の2つのモードが必要です。

  • ターミナルで実行中:tputを呼び出して、見栄えの良い出力を生成できます
  • ターミナルで実行されていない:tputを呼び出さず、代わりに、ここで行っているように電子メールにパイプするのに適した一般的なテキストのみの出力形式を生成する必要があります。

単体テストが端末で実行されているかどうかを知る最も簡単な方法は、端末を参照するstdioファイル記述子をテストすることです。シェルスクリプトの場合、次のようになります。

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

基本的に:ターミナルで実行している場合を除いて、tputを呼び出さないでください。そうすることで、発生するエラーを回避し、実行しているモードに関係なく適切な出力を生成できます。

7
Celada