Странная проблема с 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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам