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

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

решение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.

Связанный контент