ich eine einfachen Bash-Funktion geschrieben, den Wert aus einer INI-Datei lesen würde (definiert durch Variable CONF_FILE
) und Ausgabe, die esLese Wert aus einer INI-Stil-Datei mit sed/awk
getConfValue() {
#getConfValue section variable
#return value of a specific variable from given section of a conf file
section=$1
var="$2"
val=$(sed -nr "/\[$section\]/,/\[/{/$var/p}" $CONF_FILE)
val=${val#$var=}
echo "$val"
}
Das Problem ist, dass es funktioniert Kommentare nicht ignorieren und Probleme verursachen, wenn mehrere Variablen innerhalb eines Abschnitts gemeinsame Teilstrings enthalten.
Beispiel ini-Datei:
[general]
# TEST=old
; TEST=comment
TEST=new
TESTING=this will be output too
PATH=/tmp/test
Lauf getConfValue general PATH
würde Ausgang /tmp/test
wie erwartet, aber läuft getConfValue general TEST
zeigt alle Probleme dieser Ansatz hat.
Wie behebt man das?
Ich weiß, es gibt dedizierte Tools wie crudini
oder Tools für Python, Perl und PHP in freier Wildbahn, aber ich möchte keine zusätzlichen Abhängigkeiten für einfache Konfig Dateianalyse hinzufügen. Eine Lösung mit awk anstelle von sed wäre auch in Ordnung.
Danke! Das funktioniert gut. Das einzige Problem dieses Ansatzes ist, dass es fehlschlägt, wenn Leerzeichen (oder Tabulatoren) vor dem Variablennamen stehen. Ist es möglich, etwas wie "" * zum Suchstring hinzuzufügen? – smihael
Ich aktualisiert mit einem 'sed' Beispiel, das Leerzeichen vor dem Schlüssel/Wert-Paar berücksichtigt. – JNevill