ログファイル名に現在の時刻が含まれるcronスクリプトのログファイルを作成したいと思います。これは私が使おうとしたコマンドです:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
残念ながら、実行時に次のメッセージが表示されます:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
date
をエスケープしてみました さまざまな方法で参加しますが、幸運はありません。これをcrontabファイルでインラインで実行することは可能ですか、それともこれを行うためにシェルスクリプトを作成する必要がありますか?
承認された回答:
簡単な答え:
%
をエスケープします %
として :
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
長い答え:
エラーメッセージは、コマンドを実行するシェルに2番目のバックティック文字が表示されないことを示しています:
/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'
これは、他の回答のいずれかを試したときに受信した2番目のエラーメッセージによっても確認されます。
/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'
crontabのマンページは、コマンドが最初のエスケープされていない%
までしか読み取られないことを確認します。 サイン:
「6番目」のフィールド(行の残りの部分)は、実行するコマンドを
指定します。改行または%
までの、行のコマンド部分全体 文字、/bin/sh
によって実行されます またはSHELL
で指定されたシェルによって cronfileの変数。 パーセント記号(%
) コマンド、バックスラッシュ(でエスケープされていない場合) )、に変更されます 改行文字 、および最初の
%
以降のすべてのデータ
標準入力としてコマンドに送信されます。