Назад | Перейти на главную страницу

Странная проблема с crontab и echo

$ 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

Почему я получаю -e на выходе? И crontab, и bash используют /bin/echo

Они наверное не оба используют /bin/echo. Среда, используемая cron вероятно, отличается от вашей интерактивной среды. Для уверенности укажите полный путь.

Это одна из причин, по которой люди рекомендуют использовать printf вместо того echo для портативности.

* * * * * printf "test1\ntest2\n" >> logfile

Оболочка, которая cron использует sh а не Bash. В моей системе sh действительно Dash и его echo не имеет -e. Так -e становится просто очередной выводимой строкой. Другие версии оболочки Bourne или оболочки, обеспечивающие ее функциональные возможности, могут иметь -e.

Если вы используете echo без полного пути в вашем crontab, вы получаете встроенную оболочку echo вместо того /bin/echo. В командной строке, если вы используете Bash, тогда echo без полного пути дает вам встроенную версию Bash.