Wie exportiere ich festgelegte Variablen auf einmal? Der Befehl

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

>set a=123 b="asd asd" c="hello world" 

Kommentare

  • Was meinst du mit Exportieren? alles auf einmal? Sie können Semikolons verwenden, um in einer Zeile zu definieren … wie a = 123; b = " asd asd "; c = " Hallo Welt "
  • Sehr ähnlich zu unix.stackexchange .com / q / 79064/4667
  • set zeigt auch Funktionen und Systemvariablen wie BASH_VERSION
  • an. Ihre Frage ist unklar . Ist das ein Auszug der set Ausgabe, die Sie ' anzeigen? Wenn ja, dann ist ' nicht bash ' s. Möchten Sie alle aktuell eingestellten Variablen einschließlich der speziellen Shell-Variablen exportieren? Oder nur diese 3 Variablen wie in export a b c?
  • export ${!T*} würden einen definierten Parameter exportieren, dessen Name mit T. Leider scheint es ' keine Möglichkeit zu geben, auf einfache Weise eine Liste aller definierten Parameter zu erstellen.

Antwort

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

set -a 

man Seite:

-a
Wenn diese Option aktiviert ist, muss für jedes das Exportattribut festgelegt werden Variable, für die eine Zuweisung ausgeführt wird;

Um diese Option zu deaktivieren, führen Sie anschließend set +a aus.

Beispiel:

set -a . ./environment set +a 

Wobei environment enthält:

FOO=BAR BAS="quote when using spaces" 

Kommentare

  • Dies muss jedoch aktiviert sein, bevor Variablen zugewiesen werden. ' macht nichts mit zuvor zugewiesenen Variablen.
  • @chepner, Danke, ich habe vergessen, das zu erwähnen !!
  • Dies auch automatisch Exportiert Funktionen auf die gleiche Weise wie function example(){ echo good; }; export -f example

Antwort

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" 

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

source /my/env/var/file 

Antwort

`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")` 
  1. Rufen Sie zuerst 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. Alle durch Leerzeichen getrennten Umgebungsvariablennamen abrufen: awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}" Referenz: awk-Printing-Spaltenwert e ohne neue Zeile und Hinzufügen von Komma und https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. Jetzt müssen wir diese Variablen exportieren, aber xargs kann dies nicht, da es den untergeordneten Prozess verzweigt. Der Export muss unter dem aktuellen Prozess ausgeführt werden. echo "export" ... Erstellen Sie einen gewünschten Befehl und führen Sie ihn dann mit „ aus. Das ist alles: S.

Kommentare

  • Willkommen bei U & L SE. Vielleicht können Sie Ihren Beitrag bearbeiten und einige Erläuterungen geben.
  • Es ist ' nicht korrekt anzunehmen, dass Umgebungsvariablennamen nur aus az bestehen und AZ. Sie enthalten normalerweise auch Unterstriche und Ziffern, sodass das Muster [a-zA-Z_][a-zA-Z0-9_]* lautet. Es gibt einige Variationen, die auf der Shell basieren, die Sie ' wird verwendet, aber dies ist der sichere / tragbare Ansatz.
  • Guter Punkt @ChrisJohnson – aktualisiert!

Antwort

Sie können export dem Variablennamen über awk und die resultierende Ausgabe:

eval $(printenv | awk -F= "{ print "export " $1 }") 

Kommentare

  • printenv druckt die Variablen, die bereits exportiert wurden. Das ' funktioniert nicht nur wenn es Variablen gibt, die Zeilenumbrüche enthalten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.