Sto cercando di eseguire uno script bash che ho tramite cron e ricevo il seguente errore all'inizio dell'esecuzione:
tput: No value for $TERM and no -T specified
Ecco cosa c'è nel mio 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]
Risposta accettata:
Il tuo script di unit test probabilmente chiama tput
per generare un output carino che mostra quali test passano e falliscono. Sotto cron
non esiste un terminale e quindi nessun tipo di terminale ($TERM
), quindi tput
non può controllare il terminale inesistente.
Il tuo script di unit test deve avere 2 modalità:
- in esecuzione su un terminale:può chiamare
tput
per generare un output di bell'aspetto - non è in esecuzione su un terminale:non dovrebbe chiamare
tput
e genera invece un formato di output di solo testo generico che è adatto per il piping in un'e-mail come stai facendo qui.
Il modo più semplice per gli unit test di sapere se sono in esecuzione o meno su un terminale è testare i descrittori di file stdio che fanno riferimento a un terminale. Se è uno script di shell, allora:
if [ -t 1 ]; then
tput bold; echo pretty; tput sgr0
else
echo ugly
fi
Fondamentalmente:non chiamare tput
a meno che tu non stia funzionando su un terminale, e così eviterai l'errore che stai ricevendo, oltre a produrre un output ragionevole in qualsiasi modalità in cui ti trovi.