
$ 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 qué aparece el mensaje -e
en el resultado? Tanto crontab como bash están usando/bin/echo
Respuesta1
probablemente seannoambos usando /bin/echo
. El entorno utilizado cron
probablemente sea diferente de su entorno interactivo. Especifique la ruta completa para estar seguro.
Respuesta2
Esta es una de las razones por las que la gente recomienda su uso printf
en lugar de echo
por portabilidad.
* * * * * printf "test1\ntest2\n" >> logfile
El shell que cron
utiliza es sh
en lugar de Bash. En mi sistema, sh
es realmente Dash y echo
no tiene -e
. Entonces -e
se convierte en una cadena más para generar. Es posible que otras versiones del shell Bourne o shells que proporcionen su funcionalidad tengan -e
.
Si lo usa echo
sin la ruta completa en su archivo crontab
, obtendrá el shell integrado echo
en lugar de /bin/echo
. En la línea de comando, si está usando Bash, echo
sin la ruta completa obtendrá la versión incorporada de Bash.