Frage doppelte Anführungszeichen und Prozentzeichen (%) in Cron


Der folgende Befehl funktioniert von prompt, aber nicht von crontab.

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

Ich muss es täglich Cron hinzufügen.


52
2018-05-27 12:27


Ursprung


Ihr Beispiel ist erstaunlich, das% ist umgeben von doppelten, einfachen und hinteren Anführungszeichen. Keine Hoffnung lassen, dass das Ausbrechen von Zitaten funktionieren könnte. - tuxayo


Antworten:


Du musst dem entkommen % Zeichen. Sie haben eine besondere Bedeutung in crontabs:

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.

96
2018-05-27 12:33



+1 Sehr interessant, das wusste ich auch nicht. Überrascht bin ich nicht darauf gestoßen. - Kyle Smith
Nun, ich bin gerade in das hineingeraten. Ich benutzte date +%F und kam nirgendwohin - adamo
Hat diese Syntax einen nützlichen Nutzen? Mit SHELL=/bin/bashIch kann immer neu schreiben cat %Hello world wie cat <<<'Hello world'. Ich sehe keine Notwendigkeit für spezielle Syntax. - Witiko
@Witiko Wenn die "Spezialsyntax", nach der Sie fragen, der Backslash ist, um Prozent zu entkommen, dann ist die eigene Frage des OP ein Beispiel, wo es benötigt wird: Befehlsargumente, die Prozent erfordern, insbesondere das Datumsprogramm, das in a ziemlich populär ist Crontab-Befehl. Wenn Sie sich eigentlich fragen, warum cron überhaupt dieses Problem hat: zB: Ersetzen Sie den Zeilenvorschub anstelle von Prozent, dann können Sie in einer einzigen Zeile, die crontab benötigt, einen "Befehl" angeben, der aus zwei Zeilen besteht oder mehrere untergeordnete Befehle. - gwideman
Letzteres. Und wie ich bereits erwähnt habe, kann man dasselbe mit bash machen. Keine Notwendigkeit, die Syntax von Cron zu verwässern. - Witiko


Dies beantwortet nicht direkt Ihre Frage, aber ich würde vorschlagen, dass Sie eine Skriptdatei in / usr / local / bin (oder ~ / bin oder was auch immer angebracht ist) erstellen und diese von cron aufrufen. Es ist einfacher zu testen und zu bearbeiten.


7
2018-05-27 12:48



Nach meiner Erfahrung ist es viel einfacher, 50 Zeilen in einer Crontab zu verwalten, als 50 kleine Dateien zu verwalten. Sie werden sicherlich längere Skripte in Skriptdateien umwandeln, aber für One-Liner ist das vielleicht ein Overkill. - Witiko