set
kommandoen viser alle lokale variabler som nedenfor. Hvordan eksporterer jeg disse variablene samtidig?
>set a=123 b="asd asd" c="hello world"
Kommentarer
Svar
Kjør følgende kommando før du setter variablene:
set -a
man side:
-a
Når dette alternativet er på, skal eksportattributtet angis for hver variabel som en oppgave utføres for;
For å slå av dette alternativet, kjør set +a
etterpå.
Eksempel:
set -a . ./environment set +a
Hvor environment
inneholder:
FOO=BAR BAS="quote when using spaces"
Kommentarer
- Dette må imidlertid være aktivert før du tilordner variabler. Det gjør ' ikke noe til tidligere tildelte variabler.
- @chepner, takk, jeg glemte å nevne det !!
- Dette også automatisk eksporterer funksjoner på samme måte som
function example(){ echo good; }; export -f example
Svar
Dette fungerer hvis skallet ditt er bash (muligens også andre skjell)
export > /my/env/var/file
den nye filen din inneholder en dump av alle for tiden definerte variabler … med oppføringer som
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"
og deretter koble opp det nåværende skallet med alle disse env vars-utgavene
source /my/env/var/file
Svar
`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")`
-
Få først alle angitte miljøvariabler:
(set -o posix ; set)
Referanse: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba -
Få alle miljøvariabelnavn, atskilt med mellomrom:
awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}"
Referanse: awk-Utskrift av kolonneverdi e uten ny linje og legge til komma og https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command -
Nå må vi eksportere disse variablene, men xargs kan ikke gjøre dette fordi det gaffelbarneprosessen, eksporten må kjøres under gjeldende prosess.
echo "export" ...
bygg en kommando vi ønsker, og bruk deretter « for å kjøre den. Det er alt: s.
Kommentarer
- Welcomme til U & L SE. Kanskje du kan redigere innlegget ditt og gi litt forklaring.
- Det ' er ikke riktig å anta at miljøvariablenavn bare vil bestå av az og AZ. De inkluderer ofte også understrekninger og sifre, så mønsteret vil være
[a-zA-Z_][a-zA-Z0-9_]*
. Det er noen variasjoner på dette basert på skallet du ' bruker, men dette er den sikre / bærbare tilnærmingen. - Godt poeng @ChrisJohnson – oppdatert!
Svar
Du kan forlenge export
til variabelnavnet via awk
og eval
den resulterende utgangen:
eval $(printenv | awk -F= "{ print "export " $1 }")
Kommentarer
-
printenv
skriver ut variablene som allerede er eksportert. Det vant også ' t arbeid prop virkelig hvis det er variabler som inneholder nye linjetegn.
set
viser også funksjoner og systemvariabler som BASH_VERSIONset
som du sender ut '? I så fall er det ' s ikkebash
' s. Vil du eksportere alle gjeldende variabler inkludert spesielle skallvariabler? Eller bare de tre variablene som iexport a b c
?export ${!T*}
vil eksportere en definert parameter hvis navn starter medT
. Dessverre ser det ikke ut til at ' er en måte å enkelt generere en liste over alle definerte parametere.