
$ 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
これが、携帯性のためにの代わりにを使用することを推奨する理由の 1 つですecho
。
* * * * * printf "test1\ntest2\n" >> logfile
cron
を使用するシェルはsh
Bash ではなく です。私のシステムでは、sh
は実際には Dash であり、 がecho
ありません-e
。そのため、-e
は出力される単なる別の文字列になります。Bourne シェルの他のバージョンや、その機能を提供するシェルには がある場合があります-e
。
echo
でフルパスを指定せずに を使用すると、 ではなくシェルの組み込みバージョンが取得されます。コマンド ラインで Bash を使用している場合、フルパスを指定せずにを使用するとcrontab
、Bashの組み込みバージョンが取得されます。echo
/bin/echo
echo