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
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}")`
-
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 -
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 -
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.
set
viser også funktioner og systemvariabler som BASH_VERSIONset
output, du ' viser igen? Hvis ja, er det ' s ikkebash
' s. Ønsker du at eksportere alle de aktuelt indstillede variabler inklusive de specielle shellvariabler? Eller kun de 3 variabler som iexport a b c
?export ${!T*}
eksporterer enhver defineret parameter, hvis navn starter medT
. Desværre ser der ikke ud ' at være en måde til let at generere en liste over alle definerede parametre.