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
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
Où 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}")`
-
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 -
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 -
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.
set
affiche également des fonctions et des variables système telles que BASH_VERSIONset
que vous affichez '? Si tel est le cas, alors ' nest pasbash
' s. Voulez-vous exporter toutes les variables actuellement définies, y compris les variables shell spéciales? Ou seules ces 3 variables comme dansexport a b c
?export ${!T*}
exporteraient tout paramètre défini dont le nom commence parT
. Malheureusement, il ne semble pas ' être un moyen de générer facilement une liste de tous paramètres définis.