
$ 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
cron
사용하는 쉘은 sh
Bash가 아닙니다. 내 시스템에는 sh
실제로 Dash가 echo
있고 -e
. 따라서 -e
출력할 또 다른 문자열이 됩니다. Bourne 쉘의 다른 버전이나 해당 기능을 제공하는 쉘에는 -e
.
echo
에서 전체 경로 없이 를 사용하면 대신 crontab
셸의 내장 경로를 얻게 됩니다 . 명령줄에서 Bash를 사용하는 경우 전체 경로가 없으면 Bash의 내장 버전이 제공됩니다.echo
/bin/echo
echo