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 ' nichtbash
' s. Möchten Sie alle aktuell eingestellten Variablen einschließlich der speziellen Shell-Variablen exportieren? Oder nur diese 3 Variablen wie inexport a b c
? -
export ${!T*}
würden einen definierten Parameter exportieren, dessen Name mitT
. 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}")`
-
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 -
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 -
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.