fuga tra virgolette doppie e segni di percentuale (%) in cron


75

Il seguente comando funziona dal prompt ma non da crontab.

 grep abc  /var/log/messages | grep "`date '+%B %d'`" | mail -s"abc log of `hostname`" shantanu.oak+`hostname`@gmail.com

Devo aggiungerlo al cron giornaliero.


Il tuo esempio è sorprendente,% è racchiuso tra virgolette doppie, semplici e indietro. Non lasciare alcuna speranza che la fuga delle citazioni possa funzionare.
tuxayo,

Risposte:


126

Devi sfuggire ai %segni. Hanno un significato speciale nei crontab:

man (5) crontab:

Percent-signs (%) in the command, unless escaped with backslash (\), 
will be changed into newline characters, and all data after the 
first % will be sent to the command as standard input.

7
+1 Molto interessante, neanche io lo sapevo. Sorpreso non mi sono imbattuto in questo.
Kyle Smith,

3
Beh, l'ho appena incontrato. Stavo usando date +%Fe non andavo da nessuna parte
adamo il

2
Questa sintassi ha qualche utilità? Con SHELL=/bin/bash, posso sempre riscrivere cat %Hello worldcome cat <<<'Hello world'. Non vedo la necessità di una sintassi speciale.
Witiko,

@Witiko Se la "sintassi speciale" di cui stai chiedendo è la barra rovesciata per sfuggire alla percentuale, allora la stessa domanda del PO è un esempio in cui è necessaria: argomenti di comando che richiedono la percentuale, in particolare il programma della data, che sarebbe abbastanza popolare in un comando crontab. Se in realtà stai chiedendo perché cron ha questo gotcha in primo luogo: cioè: sostituisce il feed di riga al posto della percentuale, quindi immagino che sia così che tu possa fornire, su una singola riga che crontab richiede, un "comando" che consiste di due o più comandi secondari.
Gwideman,

L'ultimo. E, come ho già detto, uno può fare lo stesso con bash. Non c'è bisogno di sporcare la sintassi di Cron.
Witiko,

7

Questo non risponde direttamente alla tua domanda, ma suggerirei di creare un file di script in / usr / local / bin (o ~ / bin o qualunque cosa sia appropriata) e chiamarlo da cron. È più facile testare e modificare.


2
Nella mia esperienza, è molto più facile mantenere 50 linee in un crontab piuttosto che mantenere 50 piccoli file. Avrai sicuramente voglia di trasformare script più lunghi in file di script, ma farlo per le righe singole potrebbe essere eccessivo.
Witiko,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.