Snažím se spustit bash skript, který mám přes cron, a na začátku provádění se mi zobrazuje následující chyba:
tput: No value for $TERM and no -T specified
Zde je to, co je v mém 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]
Přijatá odpověď:
Váš testovací skript jednotky pravděpodobně volá tput
za účelem generování pěkného výstupu ukazujícího, které testy projdou a které selžou. Pod cron
neexistuje žádný terminál a tedy ani typ terminálu ($TERM
), takže tput
nemůže ovládat neexistující terminál.
Váš testovací skript jednotky musí mít 2 režimy:
- běží na terminálu:může volat
tput
vytvářet pěkně vypadající výstup - neběží na terminálu:nemělo by volat
tput
a místo toho vygenerujte obecný pouze textový výstupní formát, který je vhodný pro vložení do e-mailu, jak to děláte zde.
Nejjednodušší způsob, jak testy jednotek zjistit, zda běží nebo neběží na terminálu, je otestovat deskriptory souborů stdio odkazujících na terminál. Pokud je to skript Shell, pak:
if [ -t 1 ]; then
tput bold; echo pretty; tput sgr0
else
echo ugly
fi
V zásadě:nevolejte tput
pokud neběžíte na terminálu a vyhnete se tak chybám, které dostáváte, a navíc vytvoříte přiměřený výstup v jakémkoli režimu, ve kterém náhodou běžíte.