2008-11-20 11 views
7

Ich muss eine Systemumgebungsvariable aus einem Bash-Skript festlegen, die außerhalb des aktuellen Bereichs verfügbar wäre. So würden Sie normalerweise Umgebungsvariablen wie folgt exportieren:Wie exportiere ich eine System-Scope-Umgebungsvariable in Bash

Export MY_VAR =/opt/my_var

Aber ich brauche die Umgebungsvariable wenn auch auf Systemebene zur Verfügung stehen. Ist das möglich?

Antwort

5

Dies ist der einzige Weg, ich weiß, zu tun, was Sie wollen:

In foo.sh, Sie haben:

#!/bin/bash 
echo MYVAR=abc123 

Und wenn Sie den Wert der Variablen erhalten möchten, müssen Sie um folgende Aktionen: auf

$ eval "$(foo.sh)" # assuming foo.sh is in your $PATH 
$ echo $MYVAR #==> abc123 

Je was Sie tun wollen, und wie Sie wollen, es zu tun, Vorschlag Douglas Leeder die über Quelle verwendet werden könnte, aber es wird die gesamte Datei, Funktionen beziehen und alle. Mit eval werden nur die Daten ausgewertet, die gecallt werden.

+0

versuchte ich nur, dass ich zu tun. Ich hatte eval und $ (foo), außer dass ich die Anführungszeichen um das Argument zu eval weggelassen habe. Hat nicht funktioniert. Danke für die Syntaxkorrektur. – jmanning2k

13

Nicht wirklich - sobald Sie in einem Subprozess laufen, können Sie Ihre Eltern nicht beeinflussen.

es zwei Möglichkeiten:

1) Quelle das Skript, anstatt sie laufen (siehe source .):

 
    source {script} 

2) Haben Sie das Skript ausgegeben, um die Exportbefehle und eval, dass:

 
    eval `bash {script}` 
OR: 
    eval "$(bash script.sh)" 

EDIT: Korrigiert die zweite Option als Eval und nicht als Quelle. Opps.

1

Setzen Sie die Variable in/etc/profile (erstellen Sie die Datei, falls erforderlich). Dadurch wird die Variable im Wesentlichen jedem Bash-Prozess zur Verfügung gestellt.

0

Setzen Sie die Variable in/etc/profile (erstellen Sie die Datei, falls erforderlich). Dadurch wird die Variable im Wesentlichen jedem Bash-Prozess zur Verfügung gestellt.

... zu jedem neuen bash Prozess ...