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]
承認された回答:
ユニットテストスクリプトはおそらくtput
を呼び出します どのテストが成功し、失敗するかを示すきれいな出力を生成するため。 cron
の下 端末がないため、端末タイプ($TERM
)はありません )、したがってtput
存在しない端末を制御することはできません。
ユニットテストスクリプトには2つのモードが必要です:
- 端末で実行:
tput
を呼び出すことができます 見栄えの良い出力を生成するには - 端末で実行されていない:
tput
を呼び出さないでください 代わりに、ここで行っているように電子メールにパイプするのに適した一般的なテキストのみの出力形式を生成します。
単体テストで端末で実行されているかどうかを確認する最も簡単な方法は、端末を参照するstdioファイル記述子をテストすることです。シェルスクリプトの場合:
if [ -t 1 ]; then
tput bold; echo pretty; tput sgr0
else
echo ugly
fi
基本的に:tput
を呼び出さないでください ターミナルで実行している場合を除いて、発生しているエラーを回避し、実行しているモードに関係なく適切な出力を生成します。