Comment exporter des variables définies, toutes en même temps? La commande

set affiche toutes les variables locales comme ci-dessous. Comment exporter toutes ces variables en même temps?

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

Commentaires

  • Que voulez-vous dire par export tout à la fois? vous pouvez utiliser des points-virgules pour définir sur une seule ligne … comme a = 123; b = " asd asd "; c = " bonjour le monde "
  • Très similaire à unix.stackexchange .com / q / 79064/4667
  • set affiche également des fonctions et des variables système telles que BASH_VERSION
  • Votre question nest pas claire . Est-ce un extrait de set que vous affichez '? Si tel est le cas, alors ' nest pas bash ' s. Voulez-vous exporter toutes les variables actuellement définies, y compris les variables shell spéciales? Ou seules ces 3 variables comme dans export a b c?
  • export ${!T*} exporteraient tout paramètre défini dont le nom commence par T. Malheureusement, il ne semble pas ' être un moyen de générer facilement une liste de tous paramètres définis.

Réponse

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

set -a 

man page:

-a
Lorsque cette option est activée, lattribut dexportation doit être défini pour chaque variable à laquelle une affectation est effectuée;

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

Exemple:

set -a . ./environment set +a 

environment contient:

FOO=BAR BAS="quote when using spaces" 

Commentaires

  • Ceci doit être activé avant dattribuer aux variables, cependant. Il ne fait rien ' aux variables précédemment assignées.
  • @chepner, merci jai oublié de le mentionner !!
  • Cela aussi automatiquement exporte les fonctions de la même manière que function example(){ echo good; }; export -f example

Answer

Cela fonctionne si votre shell est bash (éventuellement dautres shells également)

export > /my/env/var/file 

votre nouveau fichier contiendra un vidage 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 pour relancer le shell actuel avec tous ces problèmes denvironnement.

source /my/env/var/file 

Réponse

`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")` 
  1. Tout dabord, récupérez toutes les variables denvironnement 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. Obtenir tous les noms de variables denvironnement, 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 column valu e sans nouvelle ligne et en ajoutant une virgule et https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. Maintenant, nous devons exporter ces variables, mais xargs ne peut pas le faire car il fourche le processus enfant, lexportation doit être exécutée sous le processus actuel. echo "export" ... créez une commande que nous voulons, puis utilisez «  pour lexécuter. Cest tout: p.

Commentaires

  • Bienvenue à U & L SE. Vous pouvez peut-être éditer votre message et donner quelques explications.
  • Il ' nest pas correct de supposer que les noms de variables denvironnement seront uniquement composés de az et AZ. Ils incluent généralement des traits de soulignement et des chiffres, de sorte que le motif serait [a-zA-Z_][a-zA-Z0-9_]*. Il existe quelques variantes basées sur le shell que vous ' est utilisé, mais cest lapproche sûre / portable.
  • Bon point @ChrisJohnson – mis à jour!

Réponse

Vous pouvez ajouter export au nom de la variable via awk et eval le résultat obtenu:

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

Commentaires

  • printenv imprime les variables qui sont déjà exportées. Cela ne fonctionnera pas ' erly sil y a des variables qui contiennent des caractères de nouvelle ligne.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *