"echo" imprime as opções no crontab

"echo" imprime as opções no crontab

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

informação relacionada