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
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}")`
-
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 -
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 -
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.
set
visar också funktioner och systemvariabler som BASH_VERSIONset
som du visar ' visar? I så fall är det ' s intebash
' s. Vill du exportera alla inställda variabler inklusive de speciella skalvariablerna? Eller bara de tre variablerna som iexport a b c
?export ${!T*}
exporterar alla definierade parametrar vars namn börjar medT
. Tyvärr verkar det inte ' vara ett sätt att enkelt skapa en lista över alla definierade parametrar.