Wie exportiere ich gesetzte Variablen auf einmal?

39

setBefehl zeigt alle lokalen Variablen wie unten. Wie exportiere ich diese Variablen auf einmal?

>set
a=123
b="asd asd"
c="hello world"
Neerav
quelle
Was meinst du mit Export auf einmal? Sie können Semikolons verwenden, um in einer Zeile zu definieren ... wie a = 123; b = "asd asd"; c = "Hallo Welt"
Raza
Sehr ähnlich zu unix.stackexchange.com/q/79064/4667
Glenn Jackman
2
setzeigt auch Funktionen und Systemvariablen wie BASH_VERSION
Glenn Jackman
Ihre Frage ist unklar. Ist das ein Auszug der setAusgabe, die Sie zeigen? Wenn ja, dann ist es nicht bash. Möchten Sie alle aktuell gesetzten Variablen einschließlich der speziellen Shell-Variablen exportieren? Oder nur diese 3 Variablen wie in export a b c?
Stéphane Chazelas
export ${!T*}würde jeden definierten Parameter exportieren, dessen Name mit beginnt T. Leider scheint es keine einfache Möglichkeit zu geben, eine Liste aller definierten Parameter zu erstellen .
Chepner

Antworten:

72

Führen Sie den folgenden Befehl aus, bevor Sie die Variablen festlegen:

set -a 

Manpage:

-a
Wenn diese Option aktiviert ist, wird das Exportattribut für jede Variable festgelegt, für die eine Zuweisung durchgeführt wird.

Führen Sie set +aanschließend den Befehl aus, um diese Option zu deaktivieren.

Beispiel:

set -a
. ./environment
set +a

Wo environmententhält:

FOO=BAR
BAS='quote when using spaces'
Nitin
quelle
13
Dies muss jedoch vor dem Zuweisen zu Variablen aktiviert werden. An zuvor zugewiesenen Variablen wird nichts geändert.
Chepner
1
@chepner, Danke, das habe ich vergessen zu erwähnen !!
Nitin
Dies exportiert auch automatisch Funktionen auf die gleiche Weise wiefunction example(){ echo good; }; export -f example
Oliver I
5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. Rufen Sie zunächst alle festgelegten Umgebungsvariablen ab: (set -o posix ; set) Referenz: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- Linux-Ba

  2. Abrufen aller Umgebungsvariablennamen, durch Leerzeichen getrennt: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' Referenz: awk-Spaltenwert ohne neue Zeile drucken und Komma und https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- hinzufügen awk-befehl

  3. Jetzt müssen wir diese Variablen exportieren, aber xargs kann dies nicht, da es den untergeordneten Prozess aufteilt. Der Export muss unter dem aktuellen Prozess ausgeführt werden. echo "export" ...Erstelle einen Befehl, den wir wollen, und benutze dann ``, um ihn auszuführen. Das ist alles: p.

Bär Huang
quelle
Willkommen bei U & L SE. Vielleicht können Sie Ihren Beitrag bearbeiten und erläutern.
Archemar
1
Es ist nicht richtig anzunehmen, dass Umgebungsvariablennamen nur aus az und AZ bestehen. Sie enthalten normalerweise auch Unterstriche und Ziffern, also wäre das Muster [a-zA-Z_][a-zA-Z0-9_]*. Abhängig von der verwendeten Shell gibt es einige Variationen, dies ist jedoch der sichere / portable Ansatz.
Chris Johnson
Guter Punkt @ChrisJohnson - aktualisiert!
Wil Moore III
3

Sie können exportdem Variablennamen über awkund evalder resultierenden Ausgabe voranstellen :

eval $(printenv | awk -F= '{ print "export " $1 }')
Wil Moore III
quelle
2
printenvdruckt die bereits exportierten Variablen. Das funktioniert auch nicht richtig, wenn es Variablen gibt, die Zeilenumbrüche enthalten.
Stéphane Chazelas
2

Dies funktioniert, wenn Ihre Shell bash ist (möglicherweise auch andere Shells)

export > /my/env/var/file

Ihre neue Datei enthält einen Speicherauszug aller derzeit definierten Variablen ... mit Einträgen wie

declare -x PORT="9000"
declare -x PORT_ADMIN="3001"
declare -x PORT_DOCKER_REGISTRY="5000"
declare -x PORT_ENDUSER="3000"
declare -x PRE_BUILD_DIR="/cryptdata6/var/log/tmp/khufu01/loud_deploy/curr/loud-build/hygge"
declare -x PROJECT_ID="hygge"
declare -x PROJECT_ID_BUSHIDO="bushido"

dann, um die aktuelle Shell mit all diesen env vars-Problemen aufzubocken

source  /my/env/var/file
Scott Stensland
quelle