set
afișează toate variabilele locale ca mai jos. Cum export aceste variabile simultan?
>set a=123 b="asd asd" c="hello world"
Comentarii
Răspuns
Rulați următoarea comandă, înainte de a seta variabilele:
set -a
man pagina:
-a
Când această opțiune este activată, atributul de export va fi setat pentru fiecare variabilă la care se efectuează o atribuire;
Pentru a dezactiva această opțiune, rulați set +a
după aceea.
Exemplu:
set -a . ./environment set +a
Unde environment
conține:
FOO=BAR BAS="quote when using spaces"
Comentarii
- Totuși, acest lucru trebuie activat înainte de atribuirea variabilelor. ' nu face nimic variabilelor atribuite anterior.
- @chepner, Mulțumesc că am uitat să menționez asta !!
- Acest lucru este, de asemenea, automat exportă funcții în același mod ca
function example(){ echo good; }; export -f example
Răspuns
Acest lucru funcționează dacă shell-ul dvs. este bash (posibil și alte shell-uri)
export > /my/env/var/file
noul fișier va conține o descărcare a tuturor variabilelor definite în prezent … ca
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"
apoi pentru a conecta shell-ul curent cu toate acele probleme env env
source /my/env/var/file
Răspuns
`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")`
-
Mai întâi, obțineți toate variabilele de mediu setate:
(set -o posix ; set)
Referință: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba -
Obțineți toate numele variabilelor de mediu, separate prin spațiu:
awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}"
Referință: awk-Printing value value fără linie nouă și adăugând virgulă și https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command -
Acum, trebuie să exportăm aceste variabile, dar xargs nu poate face acest lucru deoarece bifurează procesul copil, exportul trebuie executat în cadrul procesului curent.
echo "export" ...
construiți o comandă dorită, apoi folosiți „ pentru a o rula. Asta este tot: p.
Comentarii
- Bun venit la U & L SE. Poate puteți să vă editați postarea și să dați câteva explicații.
- Nu este corect ' să nu presupuneți că numele variabilelor de mediu vor consta doar din az și AZ. Acestea includ, de obicei, caractere de subliniere și cifre, astfel încât modelul ar fi
[a-zA-Z_][a-zA-Z0-9_]*
. Există câteva variații în acest sens, pe baza shell-ului ' se folosește, dar aceasta este abordarea sigură / portabilă. - Punct bun @ChrisJohnson – actualizat!
Răspuns
Puteți prepend export
la numele variabilei prin awk
și eval
rezultatul rezultat:
eval $(printenv | awk -F= "{ print "export " $1 }")
Comentarii
-
printenv
tipărește variabilele care sunt deja exportate. Asta va câștiga și ' mai ales dacă există variabile care conțin caractere de linie nouă.
set
afișează, de asemenea, funcții și variabile de sistem precum BASH_VERSIONset
afișat pe care îl afișați '? Dacă da, atunci ' nu estebash
'. Doriți să exportați toate variabilele setate în prezent, inclusiv variabilele speciale de shell? Sau numai acele 3 variabile ca înexport a b c
?export ${!T*}
ar exporta orice parametru definit al cărui nume începe cuT
. Din păcate, nu ' pare să fie o modalitate de a genera cu ușurință o listă de toți parametrii definiți.