「echo」はcrontabのオプションを出力します

「echo」はcrontabのオプションを出力します

私はPiモデルBでRasbian 3.12.26+を実行しています。

私の cron エントリは次のようになります。

* * * * * sleep 11; { echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php"; } >> /var/log/cron/calls.log

私のログは次のようになります:

-en \e[1;4;33m
Thu Sep  4 14:29:13 UTC 2014
-en \e[0m
This is output from curl!

ただし、コマンドを bash に貼り付けると、意図したとおりに動作します。

{ echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php"; } >> /var/log/cron/calls.log

そして出力は

Thu Sep  4 14:27:51 UTC 2014
This is output from curl!

最初の行は意図したとおりに下線が引かれ、太字で黄色になっています。

何らかの理由で、crontab で実行すると、echo は「-en」を引数として受け取る代わりに出力します。その結果、カラー エスケープ シーケンスはエスケープされません。

何が起こったのですか?

答え1

おそらく cron は /bin/sh を使用します。次の出力を比較して確認してください。

/bin/sh -c '{ echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php" ; } > /tmp/1'

上記はあなたが得る出力を生成します

/bin/bash -c '{ echo -en "\e[1;4;33m"; date; echo -en "\e[0m"; curl -k "http://sampleurl.com/update.php" ; } > /tmp/1'

一方、bashで同じコマンドを実行すると、必要な出力が生成されます。

関連情報