Ich habe versucht, ein einfaches Bash-Skript zu schreiben, mit dem ich eine Anwendung installieren und ihre Konfigurationsdatei aktualisieren werde. Es fällt mir schwer, die Konfigurationsdatei zu ändern.
# DBHost=localhost
DBName=test
# DBPassword=
Irgendwelche Vorschläge, wie ich oben wie unten modifiziert werden kann?
DBHost=localhost
DBName=database
DBPassword=password
bash
shell-script
text-processing
configuration
compixtr
quelle
quelle
Antworten:
Der beste Weg hängt davon ab, ob Sie erwarten, dass die Datei auch von Menschen geändert wird, wie komplex die Datei ist und ob Ihr Skript Vorrang haben soll, wenn es so aussieht, als ob jemand anderes einen anderen Wert wünscht. Das heißt, wenn die Datei bereits enthält
DBPassword=swordfish
, möchten Sie diese beibehalten oder durch ersetzenDBPassword=password
?Eine übliche Methode, um damit umzugehen, besteht darin, einen Abschnitt der Datei durch „magische Kommentare“ zu begrenzen und nur den Teil zwischen diesen Kommentaren zu bearbeiten. Hier ist eine Möglichkeit, dies mit awk zu tun. Wenn die magischen Kommentare nicht vorhanden sind, wird der neue Abschnitt am Ende der Datei hinzugefügt. Warnung: ungetesteter Code.
Dieser Ansatz funktioniert nicht gut, wenn das Programm, das die Konfigurationsdatei liest, nicht mehrere Zeilen unterstützt, die dasselbe Konfigurationselement festlegen. In diesem Fall müssen Sie die alten wirklich entfernen. In diesem Fall würde ich empfehlen, die Kommentare unberührt zu lassen und am Ende Ihre eigenen Einstellungen hinzuzufügen.
quelle
Wenn das alles ist, was Sie brauchen, können Sie so etwas tun
Dadurch wird das Original kopieren
config.file
zuconfig.file.bak
und nehmen Sie die notwendigen Änderungen.quelle
Ich werde mit "ex" im stillen Modus gehen:
terdons
sed
Befehl ist kompakt und effizient. Die Interaktion eines "Hier-Dokuments" voller Ex-Befehle und Shell-String-Interpolation kann jedoch leistungsstark sein. Beispielsweise könnte das Kennwort als Wert einer Shell-Variablen ersetzt werden:Wenn Sie
vi
oder verwendenvim
und mit dem ':' - Modus vertraut sind, ist das Hinzufügen neuer / besserer / anderer Bearbeitungen ebenfalls recht einfach.quelle