Seltsames Problem mit Crontab und Echo

Seltsames Problem mit Crontab und 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

Warum erhalte ich die -eAusgabe? Sowohl crontab als auch bash verwenden/bin/echo

Antwort1

Sie sind wahrscheinlichnichtbeide verwenden /bin/echo. Die von verwendete Umgebung cronunterscheidet sich wahrscheinlich von Ihrer interaktiven Umgebung. Geben Sie zur Sicherheit den vollständigen Pfad an.

Antwort2

Dies ist einer der Gründe, warum aus Portabilitätsgründen die Verwendung printfanstelle von empfohlen wird.echo

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

Die verwendete Shell cronist shanstelle von Bash. Auf meinem System shist es eigentlich Dash und es echohat kein -e. Es -ewird also nur ein weiterer String ausgegeben. Andere Versionen der Bourne-Shell oder Shells, die ihre Funktionalität bereitstellen, haben möglicherweise -e.

Wenn Sie echoohne den vollständigen Pfad in Ihrem verwenden crontab, erhalten Sie die integrierte Version der Shell echoanstelle von /bin/echo. Wenn Sie in der Befehlszeile Bash verwenden, echoerhalten Sie ohne den vollständigen Pfad die integrierte Version von Bash.

verwandte Informationen