Hvordan eksporterer du variabler som er satt, samtidig?

set kommandoen viser alle lokale variabler som nedenfor. Hvordan eksporterer jeg disse variablene samtidig?

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

Kommentarer

  • hva mener du eksportere alt på en gang? du kan bruke semikolon for å definere i en linje … som a = 123; b = " asd asd "; c = " hei verden "
  • Svært lik unix.stackexchange .com / q / 79064/4667
  • set viser også funksjoner og systemvariabler som BASH_VERSION
  • Spørsmålet ditt er uklart . Er det et utdrag av set som du sender ut '? I så fall er det ' s ikke bash ' s. Vil du eksportere alle gjeldende variabler inkludert spesielle skallvariabler? Eller bare de tre variablene som i export a b c?
  • export ${!T*} vil eksportere en definert parameter hvis navn starter med T. Dessverre ser det ikke ut til at ' er en måte å enkelt generere en liste over alle definerte parametere.

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}")` 
  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

  2. 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

  3. 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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *