Hogyan exportálhatjuk a beállított változókat egyszerre? A

set parancs az összes helyi változót megjeleníti, mint az alábbiakban. Hogyan exportálhatom ezeket a változókat egyszerre?

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

Megjegyzések

  • mit jelent exportálás egyszerre? pontosvesszőkkel határozhatja meg egy sorban … például: a = 123; b = " asd asd "; c = " szia világ "
  • Nagyon hasonló a unix.stackexchange .com / q / 79064/4667
  • set olyan funkciókat és rendszerváltozókat is megjelenít, mint a BASH_VERSION
  • Kérdése nem világos . Ez egy kivonat a set kimenetből, amelyet ' mutat? Ha igen, akkor ' nem bash ' s. Exportálni szeretné az összes jelenleg beállított változót, beleértve a speciális héjváltozókat is? Vagy csak az a 3 változó, mint például a export a b c?
  • export ${!T*} bármely meghatározott paramétert exportálna, amelynek neve T. Sajnos a ' nem tűnik úgy, hogy egyszerűen létrehozza az összes meghatározott paraméterek listáját.

Válasz

A változók beállítása előtt futtassa a következő parancsot:

set -a 

man oldal:

-a
Ha ez a beállítás be van kapcsolva, akkor az export attribútumot mindegyikhez be kell állítani változó, amelyhez hozzárendelést hajtanak végre;

Ennek az opciónak a kikapcsolásához futtassa az set +a parancsot.

Példa:

set -a . ./environment set +a 

Ahol a environment tartalmazza:

FOO=BAR BAS="quote when using spaces" 

Megjegyzések

  • Ezt azonban engedélyezni kell a változókhoz való hozzárendelés előtt. Nem tesz ' semmit a korábban hozzárendelt változókhoz.
  • @chepner, köszönöm, ezt elfelejtettem megemlíteni !!
  • Ez is automatikusan a funkciókat ugyanúgy exportálja, mint a function example(){ echo good; }; export -f example

Válasz

Ez akkor működik, ha a shellje bash (esetleg más shellek is)

export > /my/env/var/file 

az új fájl tartalmazza az összes jelenleg definiált változó kiírását … bejegyzésekkel tetszik

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" 

majd az aktuális héj felemeléséhez mindazokkal az env vars kérdésekkel

source /my/env/var/file 

Válasz

`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")` 
  1. Először szerezze be az összes beállított környezeti változót: (set -o posix ; set) Hivatkozás: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba

  2. Az összes környezeti változó neve szóközzel elválasztva: awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}" Hivatkozás: awk – oszlopérték nyomtatása e új sor nélkül, vessző hozzáadásával és https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. Most exportálnunk kell ezeket a változókat, de az xargs ezt nem tudja megtenni, mert elvarázsolja a gyermek folyamatokat, az exportálást az aktuális folyamat alatt kell futtatni. echo "export" ... készítsen egy kívánt parancsot, majd a “” használatával futtassa azt. Ez mind: p.

Megjegyzések

  • Welcomme az U & L SE. Lehet, hogy szerkesztheti a bejegyzését, és magyarázatot adhat.
  • Nem helyes, ha azt feltételezzük, hogy a környezeti változó nevei kizárólag az és AZ. Ezek általában aláhúzást és számjegyeket is tartalmaznak, így a minta a következő lenne: [a-zA-Z_][a-zA-Z0-9_]*. Ebben van néhány variáció a héj alapján, amelyet ' újra használja, de ez a biztonságos / hordozható megközelítés.
  • Jó pont @ChrisJohnson – frissítve!

Válasz

Előfordulhat, hogy export előre beállíthatja a változó nevét a awk és a a kapott kimenet:

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

Megjegyzések

  • printenv kinyomtatja a már exportált változókat. Ez szintén nyert ' t ha vannak olyan változók, amelyek új sor karaktereket tartalmaznak.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük