2016-04-16 11 views
0

Ich versuche, eine Umgebungsvariable in einem Bash-Skript zu verwenden, das als sudo mit source ausgeführt werden muss.Wohin ging meine Umgebungsvariable?

Ich habe die folgende Datei (my_file.sh)

echo "this is DOMAIN = $DOMAIN" 

Ich habe die DOMAIN Umgebungsvariable in meiner Sitzung ..

und ich brauche jetzt

sudo -E bash -c "source ./my_file.sh" 

laufen, aber Der Ausgang zeigt den Wert für $DOMAIN nicht an. stattdessen ist es leer.

wenn ich den Befehl ändern

sudo -E bash -c "echo $DOMAIN" 

ich den richtigen Wert zu sehen sein ..

, was mache ich falsch?

+1

Ich habe total vermisst, dass du schon '-E' benutzt hast. Sind Sie sicher, dass Sie in diesem Fall die Variable exportiert haben? – larsks

+0

Im zweiten Beispiel wird '$ DOMAIN' um die aktuelle Shell * erweitert * bevor *' sudo' ausgeführt wird. – chepner

+0

OMG .. es hat nicht exportiert !! Ich schwöre, dass der Export vorher da war. –

Antwort

3

Mit der Kommandozeile:

sudo -E bash -c "source ./my_file.sh" 

Sie ein Skript ausführen, die auf Umgebungsvariablen beziehen, die export ed von einem übergeordneten Shell sein müßten sichtbar sein.

Auf der anderen Seite:

sudo -E bash -c "echo $DOMAIN" 

erweitert den Wert von $DOMAINin den Eltern-Shell, nicht in Ihrer sudo Linie.

Um dies zu demonstrieren, versuchen Sie "arbeiten" Lösung mit einfachen Anführungszeichen:

sudo -E bash -c 'echo $DOMAIN' 

Und die Dinge zu machen, gehen, versuchen Sie die Variable exportieren:

export DOMAIN 
sudo -E bash -c "source ./my_file.sh" 

oder alternativ auf $ DOMAIN passieren die Befehlszeile ein:

sudo -E bash -c "source ./my_file.sh $DOMAIN" 

und haben Ihr Skript beziehen sich auf $1.

+0

also nach deiner antwort sollte ich $ DOMAIN no sehen? Ich exportiere es und führe 'sudo -E bash -c 'Quelle ./my_file.sh "' und du hast gesagt "-Skript, das sich auf Umgebungsvariablen beziehen kann, die aus einer Eltern-Shell exportiert werden müssten, um sichtbar zu sein .. also sollte ich es sehen .. oder fehle ich etwas? –

+0

@guymografi, mit dem single-quoted 'echo' und der nicht exportierten Variable sollte eine Leerzeile angezeigt werden, da' $ DOMAIN' für die sudo'd-bash nicht gesetzt ist und auf nichts erweitert wird. Wenn die Variable exportiert wird, ist sie für das sudo'd 'bash' und Ihr Skript sichtbar. Und ja, es kann sich auf Umgebungsvariablen beziehen. Sie haben den Inhalt Ihres Skripts nicht angegeben, daher kann ich nicht wissen, was darin enthalten ist. :-) – ghoti