2017-07-27 3 views
0
existieren

ich das folgende Bash-SkriptZeichenfolge unten Datei hinzufügen, wenn die Datei nicht bereits

#!/bin/bash 
FILE=sidekiq.yml 
DIR=/home/<user>/*/current/config 
DISCOVERY=$(find $DIR -name "$FILE"|cut -d/ -f4) 

for i in $DISCOVERY 

do grep -qF '^command[sidekiq_$i]' /usr/lib/nagios/plugins/config/sidekiq.conf || echo command[sidekiq_$i]=/usr/lib/nagios/plugins/check_procs -c 1:1 -a "'$i ['" | sudo tee -a /usr/lib/nagios/plugins/config/sidekiq.conf 

done 

Der Zweck des Skripts haben, ist eine Zeile in einer Konfigurationsdatei hinzufügen, wenn eine passende Zeile nicht der Fall ist existieren bereits.

Wenn ich das Skript ein zweites Mal ausführen, fügt es immer noch die Zeichenfolge ein. Was mache ich falsch?

Antwort

0

Das größte Problem ist, dass Sie Einzel unter Angabe der Parameter grep sind:

grep -qf '^ Befehl [sidekiq_ $ i]'/usr/lib/nagios/plugins/config/sidekiq. conf

, die variable Erweiterung für $i verhindert. Sie müssen doppelte Anführungszeichen verwenden, wenn Sie $i erweitern möchten. Das nächste Problem ist, dass greps Flag -F grep zwingt, die Suchzeichenkette als fixed Muster zu sehen, nicht als regulären Ausdruck, also wird der Caret zu einem Caret anstelle eines Ankers.

Wenn Sie den Anker brauchen, dann fallen die -F und entfliehen Sie dem eckigen Klammern:

grep -q "^command\[sidekiq_$i\]" /usr/lib/nagios/plugins/config/sidekiq.conf 

oder wenn Sie die Einfügemarke Anker nicht benötigen, dann halten -F und legen Sie die caret:

grep -qF "command[sidekiq_$i]" /usr/lib/nagios/plugins/config/sidekiq.conf 
+0

Vielen Dank ... hat es geändert in grep -qF "command [sidekiq_ $ i]" /usr/lib/nagios/plugins/config/sidekiq.conf – user2099762

Verwandte Themen