Comment exporter des variables définies en une fois?


39

setLa commande affiche toutes les variables locales comme ci-dessous. Comment exporter ces variables en une fois?

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

que voulez-vous dire exporter en une fois? vous pouvez utiliser des points-virgules pour définir en une seule ligne ... comme a = 123; b = "asd asd"; c = "hello world"
Raza


2
setaffiche également des fonctions et des variables système telles que BASH_VERSION
glenn jackman

Votre question n'est pas claire. Est-ce un extrait de la setsortie que vous montrez? Si c'est le cas, alors ce n'est pas bashle cas. Voulez-vous exporter toutes les variables actuellement définies, y compris les variables spéciales du shell? Ou seulement ces 3 variables comme dans export a b c?
Stéphane Chazelas

export ${!T*}exporterait tout paramètre défini dont le nom commence par T. Malheureusement, il ne semble pas y avoir de moyen de générer facilement une liste de tous les paramètres définis.
Chepner

Réponses:


72

Exécutez la commande suivante avant de définir les variables:

set -a 

page de manuel:

-a
Lorsque cette option est activée, l'attribut export doit être défini pour chaque variable à laquelle une affectation est effectuée.

Pour désactiver cette option, exécutez set +aensuite.

Exemple:

set -a
. ./environment
set +a

environmentcontient:

FOO=BAR
BAS='quote when using spaces'

13
Cela doit être activé avant d'affecter des variables, cependant. Cela ne fait rien aux variables précédemment assignées.
Chepner

1
@ chepner, merci j'ai oublié de mentionner ça !!
nitin

Cela exporte aussi automatiquement les fonctions de la même manière quefunction 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. Tout d’abord, obtenez toutes les variables d’environnement définies: (set -o posix ; set) Référence: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- linux-ba

  2. Obtenez tous les noms de variable d'environnement, séparés par un espace: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' Référence: awk-Printing valeur de colonne sans nouvelle ligne et en ajoutant une virgule et https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- awk-command

  3. Nous devons maintenant exporter ces variables, mais xargs ne peut pas le faire car il crée un processus enfant. L'exportation doit être exécutée avec le processus en cours. echo "export" ...construire une commande que nous voulons, puis utilisez `` pour l'exécuter. C'est tout: p.


Bienvenue à U & L SE. Peut-être que vous pouvez éditer votre message et donner quelques explications.
Archemar

1
Il n'est pas correct de supposer que les noms de variable d'environnement seront uniquement constitués de az et de AZ. Ils incluent généralement des traits de soulignement et des chiffres, ce qui est le cas [a-zA-Z_][a-zA-Z0-9_]*. Il y a quelques variations à cela en fonction du shell que vous utilisez, mais c'est l'approche sécurisée / portable.
Chris Johnson

Bon point @ChrisJohnson - mis à jour!
Wil Moore III

3

Vous pouvez ajouter exportle nom de la variable via awket evalla sortie résultante:

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

2
printenvimprime les variables déjà exportées. Cela ne fonctionnera pas non plus correctement s'il existe des variables contenant des caractères de nouvelle ligne.
Stéphane Chazelas

2

Cela fonctionne si votre shell est bash (éventuellement d'autres shells)

export > /my/env/var/file

votre nouveau fichier contiendra un dump de toutes les variables actuellement définies ... avec des entrées comme

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"

puis de soulever shell actuel avec toutes ces questions env vars

source  /my/env/var/file
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.