$ 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
使用的shellcron
是sh
而不是 Bash。在我的系统上,sh
实际上是 Dash,并且它echo
没有-e
。因此-e
,它只是另一个要输出的字符串。其他版本的 Bourne shell 或提供其功能的 shell 可能有-e
。
如果你echo
在 中使用不带完整路径的crontab
,那么你将获得 shell 的内置版本echo
而不是/bin/echo
。在命令行上,如果你使用 Bash ,那么echo
不带完整路径的 会给你 Bash 的内置版本。