Saya mencoba menjalankan skrip bash yang saya miliki melalui cron, dan saya mendapatkan kesalahan berikut di awal eksekusi:
tput: No value for $TERM and no -T specified
Inilah yang ada di crontab saya:
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]
Jawaban yang Diterima:
Skrip pengujian unit Anda mungkin memanggil tput
untuk menghasilkan keluaran cantik yang menunjukkan tes mana yang lulus dan gagal. Di bawah cron
tidak ada terminal dan dengan demikian tidak ada tipe terminal ($TERM
), jadi tput
tidak dapat mengontrol terminal yang tidak ada.
Skrip pengujian unit Anda harus memiliki 2 mode:
- berjalan di terminal:ia dapat memanggil
tput
untuk menghasilkan keluaran yang tampak cantik - tidak berjalan di terminal:seharusnya tidak memanggil
tput
dan sebagai gantinya menghasilkan format output teks saja yang cocok untuk disalurkan ke email seperti yang Anda lakukan di sini.
Cara termudah untuk pengujian unit untuk mengetahui apakah mereka berjalan di terminal atau tidak adalah dengan menguji deskriptor file stdio yang merujuk ke terminal. Jika ini adalah skrip shell, maka:
if [ -t 1 ]; then
tput bold; echo pretty; tput sgr0
else
echo ugly
fi
Pada dasarnya:jangan panggil tput
kecuali jika Anda menjalankan pada terminal, dan dengan demikian Anda akan menghindari kesalahan yang Anda dapatkan, plus menghasilkan keluaran yang wajar dalam mode apa pun yang Anda jalankan.