Seu script de teste de unidade provavelmente chama tput
para gerar uma saída considerável, mostrando quais testes são aprovados e reprovados. Sob cron
não há terminal e, portanto, nenhum tipo de terminal ( $TERM
), portanto tput
não pode controlar o terminal inexistente.
Seu script de teste de unidade precisa ter dois modos:
- em execução em um terminal: ele pode chamar
tput
para gerar uma saída bonita - não está sendo executado em um terminal: ele não deve chamar
tput
e, em vez disso, gerar um formato genérico de saída somente de texto que seja adequado para inserir um e-mail como você está fazendo aqui.
A maneira mais fácil de os testes de unidade saberem se estão ou não rodando em um terminal é para testar os descritores de arquivos stdio que se referem a um terminal. Se for um script de shell, então:
if [ -t 1 ]; then
tput bold; echo pretty; tput sgr0
else
echo ugly
fi
Basicamente: não chame tput
a menos que você esteja rodando em um terminal, e assim você evitará o erro que está recebendo, além de produzir uma saída razoável em qualquer modo em que você esteja rodando.