
$ 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 -e
Ausgabe? Sowohl crontab als auch bash verwenden/bin/echo
Antwort1
Sie sind wahrscheinlichnichtbeide verwenden /bin/echo
. Die von verwendete Umgebung cron
unterscheidet 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 printf
anstelle von empfohlen wird.echo
* * * * * printf "test1\ntest2\n" >> logfile
Die verwendete Shell cron
ist sh
anstelle von Bash. Auf meinem System sh
ist es eigentlich Dash und es echo
hat kein -e
. Es -e
wird also nur ein weiterer String ausgegeben. Andere Versionen der Bourne-Shell oder Shells, die ihre Funktionalität bereitstellen, haben möglicherweise -e
.
Wenn Sie echo
ohne den vollständigen Pfad in Ihrem verwenden crontab
, erhalten Sie die integrierte Version der Shell echo
anstelle von /bin/echo
. Wenn Sie in der Befehlszeile Bash verwenden, echo
erhalten Sie ohne den vollständigen Pfad die integrierte Version von Bash.