Doppelte Anführungszeichen und Prozentzeichen (%) in Cron werden ignoriert


75

Der folgende Befehl funktioniert von der Eingabeaufforderung aus, jedoch 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.


Ihr Beispiel ist erstaunlich, das% ist von doppelten, einfachen und rückseitigen Anführungszeichen umgeben. Keine Hoffnung zu lassen, dass das Entkommen eines Zitats funktionieren könnte.
Smoking

Antworten:


126

Sie müssen den %Zeichen entkommen . Sie haben in Crontabs eine besondere Bedeutung:

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 Sehr interessant, das wusste ich auch nicht. Überrascht bin ich nicht darauf gestoßen.
Kyle Smith

3
Nun, ich bin gerade darauf gestoßen. Ich benutzte date +%Fund kam nicht weiter
Adamo

2
Hat diese Syntax eine nützliche Verwendung? Mit SHELL=/bin/bash, ich kann immer neu schreiben , cat %Hello worldwie cat <<<'Hello world'. Ich sehe keine Notwendigkeit für eine spezielle Syntax.
Witiko

@Witiko Wenn die "spezielle Syntax", nach der Sie fragen, der umgekehrte Schrägstrich ist, um Prozent zu umgehen, dann ist die Frage des OP ein Beispiel dafür, wo dies erforderlich ist: Befehlsargumente, die Prozent erfordern, insbesondere das Datumsprogramm, das in a sehr beliebt wäre Befehl crontab. Wenn Sie sich tatsächlich fragen, warum cron diesen Punkt zuerst hat: dh: Ersetzt Zeilenvorschub anstelle von Prozent, dann können Sie auf einer einzelnen Zeile, die crontab benötigt, einen "Befehl" eingeben, der aus zwei besteht oder mehr Hilfsbefehle.
Wideman

Letzteres. Und wie gesagt, man kann das auch mit bash machen. Keine Notwendigkeit, die Syntax von Cron zu verunreinigen.
Witiko

7

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


2
Nach meiner Erfahrung ist es viel einfacher, 50 Zeilen in einer Crontab zu verwalten, als 50 winzige Dateien. Sie werden sicher längere Skripte in Skriptdateien umwandeln wollen, aber dies für Einzeiler zu tun kann ein Overkill sein.
Witiko
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.