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"
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.
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:
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
set
affiche également des fonctions et des variables système telles que BASH_VERSIONset
sortie que vous montrez? Si c'est le cas, alors ce n'est pasbash
le cas. Voulez-vous exporter toutes les variables actuellement définies, y compris les variables spéciales du shell? Ou seulement ces 3 variables comme dansexport a b c
?export ${!T*}
exporterait tout paramètre défini dont le nom commence parT
. Malheureusement, il ne semble pas y avoir de moyen de générer facilement une liste de tous les paramètres définis.Réponses:
Exécutez la commande suivante avant de définir les variables:
page de manuel:
Pour désactiver cette option, exécutez
set +a
ensuite.Exemple:
Où
environment
contient:la source
function example(){ echo good; }; export -f example
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-baObtenez 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-commandNous 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.la source
[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.Vous pouvez ajouter
export
le nom de la variable viaawk
eteval
la sortie résultante:la source
printenv
imprime 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.Cela fonctionne si votre shell est bash (éventuellement d'autres shells)
votre nouveau fichier contiendra un dump de toutes les variables actuellement définies ... avec des entrées comme
puis de soulever shell actuel avec toutes ces questions env vars
la source