Umgebungsvariablen programmgesteuert exportieren, über die Standardausgabe des Befehls

Umgebungsvariablen programmgesteuert exportieren, über die Standardausgabe des Befehls

Ok, anstatt einige lokale Umgebungsvariablen fest zu codieren, die einen Remote-Server (OpenShift-Server) spiegeln, möchte ich dies programmgesteuert tun, damit wir nicht alles manuell auf dem neuesten Stand halten müssen.

Im Moment habe ich dies in einer Datei fest codiert:

#!/usr/bin/env bash

export OPENSHIFT_MONGODB_DB_USERNAME="admin"
export OPENSHIFT_MONGODB_DB_PASSWORD="xyz"
export OPENSHIFT_MONGODB_DB_HOST="emsa-xyz-2-emsa.cloudapps.nabisco.com"
export OPENSHIFT_MONGODB_DB_PORT=60161

Anstatt es fest zu codieren, kann ich die „öffentlichen“ Umgebungsvariablen mit diesem Befehl von OpenShift abrufen:

rhc env list -a <app-name>

das dies auf stdout schreibt:

NODE_ENV=jailbreak
NPM_CONFIG_PRODUCTION=true
OPENSHIFT_MONGODB_DB_HOST=emsa-xyz-2-emsa.cloudapps.nabisco.com
OPENSHIFT_MONGODB_DB_PASSWORD=xyz
OPENSHIFT_MONGODB_DB_PORT=60161
OPENSHIFT_MONGODB_DB_USERNAME=admin

weiß jemand, wie ich diese Standardausgabe nehmen und wiederum jede dieser Variablen exportieren kann?

Ich nehme an, es wäre etwa so: Holen Sie sich jede Zeile, setzen Sie exportsie davor und führen Sie sie dann aus bash -e "export x". Das Problem ist, dass es wahrscheinlich in einer Subshell ausgeführt wird und keine Auswirkungen auf die aktuelle Shell hätte?

Die bestehende Antwort auf diese Frage ist gut und sollte nicht verloren gehen.

Antwort1

Wenn Sie der Ausgabe Ihres RHC-Befehls vertrauen, können Sie sie einfach als Quelle angeben:

. <(rhc env list -a <app-name>)

Dadurch wird jede erzeugte Zeile als Quelle verwendet (ausgeführt) rhc.

Wie geschrieben definiert der obige Code die Variablen, exportiert sie aber nicht. Wir könnten das beheben, aber der folgende Code ist sicherer und führt den Export durch.

Der Quellbefehl .erwartet eine Datei als Argument. Um die Ausgabe von rhcin ein dateiähnliches Objekt umzuwandeln, verwenden wirProzesssubstitution: <(...).

Verwenden Sie zur höheren Sicherheit:

while read -r line; do declare -x "$line"; done < <(rhc env list -a <app-name>)

Hier verwenden wir Prozesssubstitution, <(...), kombiniert mit Eingabeumleitung, <, so dass die whileSchleife aus der Ausgabe von liest rhc. Der Abstand zwischen dem ersten und dem zweiten <ist wichtig: donichtlass es weg.

Die -xOption to declareweist bash an,ExportDie Variable.

Reihenfolge ändern

Gemäß dem Kommentar unten kann der Befehl folgendermaßen in die Zeile über der Schleife rhceingefügt werden :while

tmpvar=$(rhc env list -a <app-name>)
while read -r line; do declare -x "$line"; done <<<"$tmpvar"

<<<schafft einehier Zeichenfolge. In diesem Fall bedeutet es, dass $tmpvarals Eingabe für die Schleife bereitgestellt wird while.

verwandte Informationen