Voglio creare un file di registro per uno script cron che abbia l'ora corrente nel nome del file di registro. Questo è il comando che ho provato a usare:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Sfortunatamente ricevo questo messaggio quando viene eseguito:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
Ho provato a eseguire l'escape di date
parte in vari modi, ma senza molta fortuna. È possibile farlo in linea in un file crontab o devo creare uno script di shell per farlo?
Risposta accettata:
Risposta breve:
Esci dal %
come %
:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Risposta lunga:
Il messaggio di errore suggerisce che la shell che esegue il comando non vede il secondo carattere di spunta indietro:
/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'
Ciò è confermato anche dal secondo messaggio di errore che hai ricevuto quando hai provato una delle altre risposte:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'
La pagina man di crontab conferma che il comando viene letto solo fino al primo %
senza caratteri di escape firmare:
Il campo "sesto" (il resto della riga) specifica il comando da
essere eseguito. L'intera porzione di comando della riga, fino a una nuova riga o %
carattere, verrà eseguito da /bin/sh
o dalla shell specificata in
nella SHELL
variabile del cronfile. Segni di percentuale (%
) nel comando, a meno che non sia stato eseguito l'escape con barra rovesciata ( ), verrà modificato in caratteri di nuova riga e tutti i dati dopo il primo
%
verrà inviato al
comando come standard input.