2016-04-20 13 views
0

Ich versuche, einen Cronjob mit immer gem zu erstellen.Ruby string einfache Anführungszeichen, die Probleme verursachen

every 1.day, :at => "12:00pm" do 
    grep_part_of_command = '"@timestamp":"'+Date.today.to_s 
    command "cat logstash_development.log | grep '#{grep_part_of_command}' > todays_logstash_development.log" 
end 

Was will ich erreichen:

* * * * * /bin/bash -l -c 'cat logstash_development.log | grep '"@timestamp":"2016-04-20' > todays_logstash_development.log' 

Aber wenn ich meine crontab öffnen, was ich bekommen ist:

* * * * * /bin/bash -l -c 'cat logstash_development.log | grep '\''"@timestamp":"2016-04-20'\'' > todays_logstash_development.log' 

Beachten Sie die zusätzliche '\' um die grep Matcher String.

Kann mir jemand helfen, meinen Fehler zu finden.

Antwort

1

Das scheint richtig zu sein! Bei Verwendung von einfachen Anführungszeichen werden spezielle Symbole wie ! nicht in der Shell interpretiert. '\'' ist eine Möglichkeit, ein einzelnes Zitat in einer einzelnen Zeichenfolge in Anführungszeichen zu drucken. Versuchen Sie Folgendes:

echo 'grep '\''"@timestamp":"2016-04-20'\'' > ' 

Es wird ausgegeben:

grep '"@timestamp":"2016-04-20' > 

Also, keine Sorge! Der Ausgabetext ist korrekt.

+0

Nein eigentlich der obige Befehl, wenn ich direkt am Terminal endet zeigt einen rechten Winkel auf meinem Terminal. Sie können es mit einer Dummy-Datei versuchen. – adil

+0

Imposibru! Die Ausgabe ist [korrekt] (http://s31.postimg.org/qu7pz7um3/echo.png). So interpretiert bash es. Ich habe versucht, es im ersten Absatz zu erklären. Nur für den Fall, Sie sind immer noch in Zweifel, einfache Zitate in der Bash-Programmierung oder sehen Sie genau das gleiche [wann immer Ausgabe] (https://github.com/javan/whenever/issues/327). – Uzbekjon

+0

von oben Befehl ich meinte 'Katze logstash_development.log | grep '\' '"@ timestamp": "2016-04-20' \ ''> todays_logstash_development.log' – adil

Verwandte Themen