
$ echo -e "test1\ntest2" > logfile
$ echo -e "test1\ntest2" >> logfile
$ cat logfile
test1
test2
test1
test2
$ rm logfile
$ crontab -e
* * * * * echo -e "test1\ntest2" >> logfile
$ sleep 160
$ cat logfile
-e test1
test2
-e test1
test2
Por que estou recebendo -e
a saída? Tanto o crontab quanto o bash estão usando/bin/echo
Responder1
Eles provavelmente estãonãoambos usando /bin/echo
. O ambiente usado cron
provavelmente é diferente do seu ambiente interativo. Especifique o caminho completo para ter certeza.
Responder2
Esta é uma das razões pelas quais as pessoas recomendam o uso printf
em vez de echo
portabilidade.
* * * * * printf "test1\ntest2\n" >> logfile
O shell que cron
usa é sh
em vez do Bash. No meu sistema, sh
é realmente Dash e echo
não tem -e
. Então -e
torna-se apenas mais uma string a ser produzida. Outras versões do shell Bourne ou shells que fornecem sua funcionalidade podem ter arquivos -e
.
Se você usar echo
sem o caminho completo em seu crontab
, você obterá o shell integrado echo
em vez de /bin/echo
. Na linha de comando, se você estiver usando o Bash, echo
sem o caminho completo, você terá a versão interna do Bash.