Estou executando o Rasbian 3.12.26+ em um Pi modelo B.
Aqui está a aparência da minha entrada cron:
* * * * * sleep 11; { echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php"; } >> /var/log/cron/calls.log
Aqui está a aparência do meu log:
-en \e[1;4;33m
Thu Sep 4 14:29:13 UTC 2014
-en \e[0m
This is output from curl!
No entanto, quando colo o comando no bash, ele funciona conforme o esperado:
{ echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php"; } >> /var/log/cron/calls.log
E a saída é
Thu Sep 4 14:27:51 UTC 2014
This is output from curl!
Com a primeira linha sublinhada, em negrito e amarelo conforme pretendido.
Por alguma razão, quando executado por um crontab, o echo imprime o "-en" em vez de tomá-lo como argumento. Como resultado, as sequências de escape de cores não são escapadas.
O que da?
Responder1
É provavelmente que o cron usa /bin/sh. Veja você mesmo comparando o resultado do seguinte:
/bin/sh -c '{ echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php" ; } > /tmp/1'
O acima produz a saída que você está obtendo
/bin/bash -c '{ echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php" ; } > /tmp/1'
Considerando que o mesmo comando no bash produz a saída desejada