Hvordan eksporteres de indstillede variabler på én gang?

set kommando viser alle de lokale variabler som nedenfor. Hvordan eksporterer jeg disse variabler på én gang?

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

Kommentarer

  • hvad mener du med eksport alt på en gang? du kan bruge semikolon til at definere i en linje … som a = 123; b = " asd asd "; c = " hej verden "
  • Meget lig unix.stackexchange .com / q / 79064/4667
  • set viser også funktioner og systemvariabler som BASH_VERSION
  • Dit spørgsmål er uklart . Er det et uddrag af set output, du ' viser igen? Hvis ja, er det ' s ikke bash ' s. Ønsker du at eksportere alle de aktuelt indstillede variabler inklusive de specielle shellvariabler? Eller kun de 3 variabler som i export a b c?
  • export ${!T*} eksporterer enhver defineret parameter, hvis navn starter med T. Desværre ser der ikke ud ' at være en måde til let at generere en liste over alle definerede parametre.

Svar

Kør følgende kommando, inden du indstiller variablerne:

set -a 

man side:

-a
Når denne mulighed er aktiveret, skal eksportattributten indstilles for hver variabel, som en opgave udføres til;

For at deaktivere denne indstilling skal du køre set +a bagefter.

Eksempel:

set -a . ./environment set +a 

Hvor environment indeholder:

FOO=BAR BAS="quote when using spaces" 

Kommentarer

  • Dette skal dog aktiveres, før variabler tildeles. Det gør ' ikke noget til tidligere tildelte variabler.
  • @chepner, tak, jeg glemte at nævne det !!
  • Dette også automatisk eksporterer funktioner på samme måde som function example(){ echo good; }; export -f example

Svar

Dette fungerer, hvis din shell er bash (muligvis også andre skaller)

export > /my/env/var/file 

din nye fil indeholder et dump af alle aktuelt definerede variabler … med poster ligesom

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" 

så for at jack up nuværende shell med alle disse env vars udgaver

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 indstillede miljøvariabler: (set -o posix ; set) Reference: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba

  2. Hent alle miljøvariabelnavne, adskilt af mellemrum: awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}" Reference: awk-udskrivning af kolonneværdien e uden ny linje og tilføje komma og https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. Nu er vi nødt til at eksportere disse variabler, men xargs kan ikke gøre dette, fordi det gafler underordnet proces, eksport skal køres under nuværende proces. echo "export" ... opret en kommando, vi ønsker, og brug derefter “ til at køre den. Det er alt: s.

Kommentarer

  • Welcomme til U & L SE. Måske kan du redigere dit indlæg og give en forklaring.
  • Det ' er ikke korrekt, hvis det antages, at miljøvariabelle kun består af az og AZ. De inkluderer ofte også understregninger og cifre, så mønsteret ville være [a-zA-Z_][a-zA-Z0-9_]*. Der er nogle variationer på dette baseret på den skal, du ' genbruger, men dette er den sikre / bærbare tilgang.
  • Godt punkt @ChrisJohnson – opdateret!

Svar

Du kan forlænge export til variabelnavnet via awk og eval det resulterende output:

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

Kommentarer

  • printenv udskriver de variabler, der allerede er eksporteret. Det vandt også ' t arbejde prop hvis der er variabler, der indeholder nye linjetegn.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *