[BASH] Config variablen mit Umgebungsvariablen überschreiben

Ich benötige eine Möglichkeit alle Variablen einer config Dateien, welche ich per source einbinde, mit Werten aus den Umgebungsvariabeln zu überschreiben, so diese gesetzt sind.

Nun habe ich eine Lösung gefunden, bin mir aber nicht sicher ob dies der richtige/einfachste weg ist.

Ich füge jeder Variable, welche per Env var überschreibar sein soll, einen prefix hinzu. Als Beispiel "_S_".
Am ende der config schreibe ich die Werte jeder geprefixten Variable in die ungeprefixed Version insofern die ungeprefixte Version nicht schon existiert.
Dannach wird die geprefixed Version entfernt.
Der Sicherheitsaspekt ist zu vernachlässigen, da die Skripte nur dem root user zugänglich sind.
Die Gefahr preexistende Variablen mit dem genutzen prefix zu löschen ist mir bewusst, kann aber denke ich mit einem ausreichend einzigartigem prefix vernachlässigt werden.

Über Kommentare wäre ich dankbar.

Code:
_S_SOME_FLAG="Y"
_S_SOME_dir="/home/someuser/"
NO_OVERWRITE_VAR="YAY"

overwrite_by_envs() {
  for var in $(compgen -A variable _S_ | cut -d "_" -f "3-"); do
    if ! compgen -A variable $var | grep "${var}\$"; then # TODO: this is ugly .. fixable ?
      tmp="_S_$var"
      export "${var}=${!tmp}"
    fi
    unset "_S_${var}"
  done
}
overwrite_by_envs
 
Warum verwendest du nicht einfach ein Deployment/Rollout-System ala Chef, Puppet oder Rex? Die sind doch genau auf solche Fälle ausgelegt und bieten dafür entsprechende Template-Systeme.
 
Das ganze soll zur Erstellung vieler OpenVz Container und erstellen der templates dienen.
D.h. (fürs erste) alles auf einer Maschine.
Die von dir genannten tools sind, so wie ich das sehe, aller eher zum managen vieler verschiedener Maschine (Dennoch interessant).
 
Auch Container kann man mit solchen Tools verwalten. Ich glaube gerade wenn du eine wachsende Umgebung hast, die ggf. irgendwann mal auf mehrere Maschinen verteilt werden soll, solltest du dich mit solchen Tools anfreunden. Dank sehr grossen Communities, die grossteils aus Professionals bestehen, gibt's da auch schon fertige Rezepte/Manifests wie z.B. https://github.com/hyfather/openvz_core
 
Zurück
Oben