
$ 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
решение1
Они, вероятно,нетоба используют /bin/echo
. Среда, используемая , cron
вероятно, отличается от вашей интерактивной среды. Укажите полный путь, чтобы убедиться.
решение2
Это одна из причин, по которой люди рекомендуют использовать 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.