set
commando toont alle lokale variabelen zoals hieronder. Hoe exporteer ik deze variabelen allemaal tegelijk?
>set a=123 b="asd asd" c="hello world"
Reacties
Answer
Voer het volgende commando uit voordat je de variabelen instelt:
set -a
man pagina:
-a
Als deze optie is ingeschakeld, zal het exportattribuut voor elke variabele waaraan een toewijzing wordt uitgevoerd;
Om deze optie uit te schakelen, voert u set +a
daarna uit.
Voorbeeld:
set -a . ./environment set +a
Waar environment
bevat:
FOO=BAR BAS="quote when using spaces"
Opmerkingen
- Dit moet echter zijn ingeschakeld voordat u variabelen kunt toewijzen. Het doet ' niets aan eerder toegewezen variabelen.
- @chepner, bedankt, ik ben vergeten dat te vermelden !!
- Dit ook automatisch exporteert functies op dezelfde manier als
function example(){ echo good; }; export -f example
Answer
Dit werkt als je shell bash is (mogelijk ook andere shells)
export > /my/env/var/file
je nieuwe bestand bevat een dump van alle momenteel gedefinieerde variabelen … met ingangen zoals
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"
en vervolgens de huidige shell opkrikken met al die env-vars-problemen
source /my/env/var/file
Answer
`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")`
-
Haal eerst alle ingestelde omgevingsvariabelen op:
(set -o posix ; set)
Referentie: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba -
Haal alle namen van omgevingsvariabelen op, gescheiden door een spatie:
awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}"
Referentie: awk-Printing column valu e zonder nieuwe regel en toevoeging van komma en https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command -
Nu moeten we deze variabelen exporteren, maar xargs kan dit niet doen omdat het het onderliggende proces splitst, export moet worden uitgevoerd onder het huidige proces.
echo "export" ...
bouw een commando dat we willen, en gebruik vervolgens om het uit te voeren. Dat is alles: p.
Reacties
- Welkom bij U & L SE. Misschien kun je je bericht bewerken en wat uitleg geven.
- Het ' is niet correct om aan te nemen dat de namen van omgevingsvariabelen uitsluitend uit az zullen bestaan en AZ. Ze bevatten gewoonlijk ook onderstrepingstekens en cijfers, dus het patroon zou
[a-zA-Z_][a-zA-Z0-9_]*
zijn. Er zijn enkele variaties hierop gebaseerd op de shell die u ' hergebruikt, maar dit is de veilige / draagbare benadering. - Goed punt @ChrisJohnson – bijgewerkt!
Antwoord
U kunt export
toevoegen aan de variabelenaam via awk
en eval
de resulterende uitvoer:
eval $(printenv | awk -F= "{ print "export " $1 }")
Reacties
-
printenv
drukt de variabelen af die al zijn geëxporteerd. Dat heeft ook ' geen werk nodig Ten eerste als er variabelen zijn die tekens voor een nieuwe regel bevatten.
set
geeft ook functies en systeemvariabelen weer zoals BASH_VERSIONset
-uitvoer die u ' laat zien? Zo ja, dan is het ' nietbash
' s. Wilt u alle momenteel ingestelde variabelen exporteren, inclusief de speciale shell-variabelen? Of zouden alleen die 3 variabelen zoals inexport a b c
?export ${!T*}
elke gedefinieerde parameter exporteren waarvan de naam begint metT
. Helaas lijkt ' geen manier te zijn om eenvoudig een lijst met alle gedefinieerde parameters te genereren.