Hur exporterar jag inställda variabler på en gång?

set kommandot visar alla lokala variabler som nedan. Hur exporterar jag dessa variabler på en gång?

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

Kommentarer

  • vad menar du exportera allt på en gång? du kan använda semikolon för att definiera i en rad … som a = 123; b = " asd asd "; c = " hej världen "
  • Mycket lik unix.stackexchange .com / q / 79064/4667
  • set visar också funktioner och systemvariabler som BASH_VERSION
  • Din fråga är oklar . Är det ett utdrag av set som du visar ' visar? I så fall är det ' s inte bash ' s. Vill du exportera alla inställda variabler inklusive de speciella skalvariablerna? Eller bara de tre variablerna som i export a b c?
  • export ${!T*} exporterar alla definierade parametrar vars namn börjar med T. Tyvärr verkar det inte ' vara ett sätt att enkelt skapa en lista över alla definierade parametrar.

Svar

Kör följande kommando innan du ställer in variablerna:

set -a 

man sida:

-a
När detta alternativ är aktiverat ska exportattributet ställas in för varje variabel till vilken en uppgift utförs;

För att stänga av detta alternativ, kör set +a efteråt.

Exempel:

set -a . ./environment set +a 

Där environment innehåller:

FOO=BAR BAS="quote when using spaces" 

Kommentarer

  • Detta måste dock aktiveras innan variabler tilldelas. ' gör inte någonting mot tidigare tilldelade variabler.
  • @chepner, tack, jag glömde att nämna det !!
  • Detta görs också automatiskt exporterar funktioner på samma sätt som function example(){ echo good; }; export -f example

Svar

Detta fungerar om ditt skal är bash (eventuellt även andra skal)

export > /my/env/var/file 

din nya fil innehåller en dumpning av alla för närvarande definierade variabler … med poster 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" 

sedan för att jacka upp nuvarande skal med alla dessa env vars utgåva

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. Hämta först alla inställda miljövariabler: (set -o posix ; set) Referens: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba

  2. Hämta alla miljövariabelnamn, åtskilda av mellanslag: awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}" Referens: awk-Utskrift av kolumnvärde e utan ny rad och lägga till komma och https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. Nu måste vi exportera dessa variabler, men xargs kan inte göra detta eftersom det gafflar underordnad process, export måste köras under nuvarande process. echo "export" ... bygg ett kommando vi vill använda och använd sedan ” för att köra det. Det är allt: s.

Kommentarer

  • Welcomme till U & L SE. Kanske kan du redigera ditt inlägg och ge en del förklaringar.
  • Det ' är inte korrekt om man antar att miljövariabla namn bara består av az och AZ. De inkluderar vanligtvis också understrykningar och siffror, så mönstret skulle vara [a-zA-Z_][a-zA-Z0-9_]*. Det finns några variationer på detta baserat på skalet du ' använder, men det här är den säkra / bärbara metoden.
  • Bra poäng @ChrisJohnson – uppdaterad!

Svar

Du kan förlita export till variabelnamnet via awk och eval den resulterande utgången:

eval $(printenv | awk -F= "{ print "export " $1 }") 

Kommentarer

  • printenv skriver ut de variabler som redan exporteras. Det vann inte ' t arbete prop om det finns variabler som innehåller nya linjetecken.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *