Ich versuche, ein Bash-Skript auszuführen, das ich über Cron habe, und erhalte zu Beginn der Ausführung die folgende Fehlermeldung:
tput: No value for $TERM and no -T specified
Folgendes steht in meiner 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]
Akzeptierte Antwort:
Ihr Unit-Test-Skript ruft wahrscheinlich tput
auf um eine hübsche Ausgabe zu erzeugen, die zeigt, welche Tests bestanden und fehlgeschlagen sind. Unter cron
es gibt kein Terminal und somit auch keinen Terminaltyp ($TERM
), also tput
kann das nicht vorhandene Terminal nicht steuern.
Ihr Unit-Test-Skript muss zwei Modi haben:
- läuft auf einem Terminal:Es kann
tput
aufrufen um hübsch aussehende Ausgaben zu erzeugen - läuft nicht auf einem Terminal:Es sollte
tput
nicht aufrufen und generieren Sie stattdessen ein generisches Nur-Text-Ausgabeformat, das zum Weiterleiten in eine E-Mail geeignet ist, wie Sie es hier tun.
Der einfachste Weg für die Unit-Tests festzustellen, ob sie auf einem Terminal ausgeführt werden oder nicht, besteht darin, die Deskriptoren der stdio-Datei zu testen, die sich auf ein Terminal beziehen. Wenn es sich um ein Shell-Skript handelt, dann:
if [ -t 1 ]; then
tput bold; echo pretty; tput sgr0
else
echo ugly
fi
Grundsätzlich gilt:tput
nicht aufrufen es sei denn, Sie arbeiten auf einem Terminal, und Sie vermeiden so den Fehler, den Sie erhalten, und erzeugen eine vernünftige Ausgabe in dem Modus, in dem Sie gerade laufen.