Estoy tratando de ejecutar un script bash que tengo a través de cron y recibo el siguiente error al comienzo de la ejecución:
tput: No value for $TERM and no -T specified
Esto es lo que hay en mi 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]
Respuesta aceptada:
Su script de prueba de unidad probablemente llame a tput
para generar una salida bonita que muestre qué pruebas pasan y fallan. Bajo cron
no hay terminal y por lo tanto no hay tipo de terminal ($TERM
), entonces tput
no puede controlar la terminal inexistente.
Su secuencia de comandos de prueba de unidad debe tener 2 modos:
- ejecutándose en una terminal:puede llamar a
tput
para generar resultados atractivos - no se ejecuta en una terminal:no debería llamar a
tput
y, en su lugar, genere un formato de salida genérico de solo texto que sea adecuado para canalizar en un correo electrónico como lo está haciendo aquí.
La forma más fácil para que las pruebas unitarias sepan si se están ejecutando o no en un terminal es probar el archivo stdio descritors que se refiere a un terminal. Si es un script de shell, entonces:
if [ -t 1 ]; then
tput bold; echo pretty; tput sgr0
else
echo ugly
fi
Básicamente:no llame a tput
a menos que esté ejecutando en una terminal, y así evitará el error que está recibiendo, además de producir una salida razonable en cualquier modo en el que esté ejecutando.