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
tputuntuk menghasilkan keluaran yang tampak cantik - tidak berjalan di terminal:seharusnya tidak memanggil
tputdan 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.