J'essaie d'exécuter un script bash via cron et j'obtiens l'erreur suivante au début de l'exécution :
tput: No value for $TERM and no -T specified
Voici ce qu'il y a dans ma 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]
Réponse acceptée :
Votre script de test unitaire appelle probablement tput
afin de générer une jolie sortie montrant quels tests réussissent et échouent. Sous cron
il n'y a pas de terminal et donc pas de type de terminal ($TERM
), donc tput
ne peut pas contrôler le terminal inexistant.
Votre script de test unitaire doit avoir 2 modes :
- s'exécutant sur un terminal :il peut appeler
tput
pour générer de jolis résultats - ne s'exécute pas sur un terminal :il ne doit pas appeler
tput
et à la place, générez un format de sortie texte générique qui convient à l'envoi dans un e-mail comme vous le faites ici.
Le moyen le plus simple pour les tests unitaires de savoir s'ils s'exécutent ou non sur un terminal est de tester les descripteurs de fichiers stdio faisant référence à un terminal. S'il s'agit d'un script shell, alors :
if [ -t 1 ]; then
tput bold; echo pretty; tput sgr0
else
echo ugly
fi
Fondamentalement :ne pas appeler tput
à moins que vous n'exécutiez sur un terminal, et vous éviterez ainsi l'erreur que vous obtenez, en plus de produire une sortie raisonnable dans le mode sous lequel vous vous trouvez.