Linux

crontab 和 echo 的奇怪問題

  • August 12, 2010
$ 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

他們可能不是都在使用/bin/echo. 使用的環境cron可能與您的互動環境不同。指定完整路徑以確保。

這是人們推薦使用printf而不是echo便攜性的原因之一。

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

cron使用的 shellsh不是 Bash。在我的系統上,sh真的是 Dash,它echo沒有-e. 所以-e變成了另一個要輸出的字元串。其他版本的 Bourne shell 或提供其功能的 shell 可能具有-e.

如果您echo在沒有完整路徑的情況crontabecho使用/bin/echo. 在命令行上,如果您使用的是 Bash,那麼echo沒有完整路徑會為您提供 Bash 的內置版本。

引用自:https://serverfault.com/questions/169706