Cum se exportă variabile care sunt setate, dintr-o dată? Comanda

set afișează toate variabilele locale ca mai jos. Cum export aceste variabile simultan?

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

Comentarii

  • ce vrei să spui export? dintr-o dată? puteți utiliza punctele și virgulele pentru a defini într-o singură linie … ca a = 123; b = " asd asd "; c = " bună lume "
  • Foarte similar cu unix.stackexchange .com / q / 79064/4667
  • set afișează, de asemenea, funcții și variabile de sistem precum BASH_VERSION
  • Întrebarea dvs. este neclară . Este un fragment din set afișat pe care îl afișați '? Dacă da, atunci ' nu este bash '. Doriți să exportați toate variabilele setate în prezent, inclusiv variabilele speciale de shell? Sau numai acele 3 variabile ca în export a b c?
  • export ${!T*} ar exporta orice parametru definit al cărui nume începe cu T. Din păcate, nu ' pare să fie o modalitate de a genera cu ușurință o listă de toți parametrii definiți.

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}")` 
  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

  2. 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

  3. 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ă.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *