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

使用的shellcronsh而不是 Bash。在我的系统上,sh实际上是 Dash,并且它echo没有-e。因此-e,它只是另一个要输出的字符串。其他版本的 Bourne shell 或提供其功能的 shell 可能有-e

如果你echo在 中使用不带完整路径的crontab,那么你将获得 shell 的内置版本echo而不是/bin/echo。在命令行上,如果你使用 Bash ,那么echo不带完整路径的 会给你 Bash 的内置版本。

相关内容