Frage Globale Umgebungsvariablen in einem Shell-Skript


Wie setze ich eine globale Umgebungsvariable in einem Bash-Skript?

Wenn ich sowas mache

#!/bin/bash
FOO=bar

...oder

#!/bin/bash
export FOO=bar

... die Variablen scheinen im lokalen Kontext zu bleiben, während ich sie nach der Ausführung des Skripts gerne verwenden würde.


76
2017-09-23 06:25


Ursprung


Antworten:


Führen Sie Ihr Skript mit aus . 

. myscript.sh

Dadurch wird das Skript in der aktuellen Shellumgebung ausgeführt.

export regelt, welche Variablen für neue Prozesse zur Verfügung stehen, wenn Sie also sagen

FOO=1
export BAR=2
./runScript.sh

dann $BAR wird in der Umgebung von verfügbar sein runScript.sh, aber $FOO wird nicht.


124
2017-09-23 06:28



Wenn du Lauf Ein Shell-Skript, das in einer Sub-Shell erstellt wurde und daher die Umgebung der übergeordneten Shell nicht beeinflussen kann. Sie möchten das Skript folgendermaßen ausgeben:

. ./setfoo.sh

Dies führt es im Rahmen der Strom Schale, nicht als a sub Schale.

Von der Bash-Man-Seite:

. Dateiname [Argumente]
Quelldateiname [Argumente]

Lesen und Ausführen von Befehlen aus dem Dateinamen in der aktuellen Shell   Umgebung und gibt den Exit-Status des zuletzt ausgeführten Befehls zurück   aus dem Dateinamen.

Wenn Dateiname keinen Schrägstrich enthält, werden Dateinamen in PATH verwendet   finde das Verzeichnis mit dem Dateinamen.

Die in PATH gesuchte Datei muss nicht ausführbar sein. Wenn Bash nicht ist   Im POSIX-Modus wird das aktuelle Verzeichnis durchsucht, wenn keine Datei gefunden wird   im PFAD.

Wenn die Option "sourcepath" für den Befehl shoptintin ausgeschaltet ist,   Der PATH wird nicht gesucht.

Wenn irgendwelche Argumente geliefert werden, werden sie zu den Positionsparametern   wenn der Dateiname ausgeführt wird.

Ansonsten sind die Positionsparameter unverändert. Der Rückgabestatus   ist der Status des letzten Befehls innerhalb des Skripts (0 wenn nein)   Befehle werden ausgeführt), und false, wenn Dateiname nicht gefunden wird oder nicht   gelesen werden.


47
2017-09-23 06:29



source myscript.sh ist auch machbar.

Beschreibung für den Linux-Befehl source:

source is a Unix command that evaluates the file following the command, 
as a list of commands, executed in the current context

6
2017-09-01 00:48



#!/bin/bash
export FOO=bar

oder

#!/bin/bash
FOO=bar
export FOO

Mann Export:

Die Shell muss das Exportattribut den Variablen geben, die den spezifizierten Namen entsprechen, die bewirken, dass sie sich in der Umgebung von nachfolgend ausgeführten Befehlen befinden. Wenn auf den Namen einer Variablen das Wort = folgt, wird der Wert dieser Variablen auf word gesetzt.


4
2017-09-23 06:33



FOO=bar
export FOO

-3
2017-09-23 06:27