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

cron사용하는 쉘은 shBash가 아닙니다. 내 시스템에는 sh실제로 Dash가 echo있고 -e. 따라서 -e출력할 또 다른 문자열이 됩니다. Bourne 쉘의 다른 버전이나 해당 기능을 제공하는 쉘에는 -e.

echo에서 전체 경로 없이 를 사용하면 대신 crontab셸의 내장 경로를 얻게 됩니다 . 명령줄에서 Bash를 사용하는 경우 전체 경로가 없으면 Bash의 내장 버전이 제공됩니다.echo/bin/echoecho

관련 정보