Jak exportovat nastavené proměnné najednou?

set příkaz zobrazí všechny místní proměnné, jak je uvedeno níže. Jak mohu exportovat tyto proměnné najednou?

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

Komentáře

  • co tím myslíte export všechno najednou? můžete použít středníky k definování v jednom řádku … jako a = 123; b = " asd asd "; c = " ahoj svět "
  • velmi podobný unix.stackexchange .com / q / 79064/4667
  • set také zobrazuje funkce a systémové proměnné jako BASH_VERSION
  • Vaše otázka je nejasná . Je to výňatek z set výstupu, který ' znovu zobrazujete? Pokud ano, pak to ' s není bash ' s. Chcete exportovat všechny aktuálně nastavené proměnné včetně speciálních proměnných prostředí? Nebo pouze tyto 3 proměnné jako v export a b c?
  • export ${!T*} exportují jakýkoli definovaný parametr, jehož název začíná T. Bohužel se ' nezdá být způsob, jak snadno vygenerovat seznam všech definovaných parametrů.

Odpověď

Před nastavením proměnných spusťte následující příkaz:

set -a 

man stránka:

-a
Je-li tato možnost zapnutá, bude atribut exportu nastaven pro každou proměnná, ke které se přiřazení provádí;

Tuto možnost vypnete spuštěním set +a.

Příklad:

set -a . ./environment set +a 

Kde environment obsahuje:

FOO=BAR BAS="quote when using spaces" 

Komentáře

  • To však musí být povoleno před přiřazením k proměnným. Nedělá ' nic s dříve přiřazenými proměnnými.
  • @chepner, díky, zapomněl jsem to zmínit !!
  • Toto také automaticky exportuje funkce stejným způsobem jako function example(){ echo good; }; export -f example

odpověď

Funguje to, pokud je váš shell bash (možná i jiné shelly).

export > /my/env/var/file 

váš nový soubor bude obsahovat výpis všech aktuálně definovaných proměnných … s položkami jako

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" 

pak zvednout aktuální shell se všemi těmito problémy env vars

source /my/env/var/file 

Odpověď

`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")` 
  1. Nejprve získejte všechny nastavené proměnné prostředí: (set -o posix ; set) Odkaz: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a-linux-ba

  2. Získejte všechny názvy proměnných prostředí oddělené mezerou: awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}" Odkaz: hodnota sloupce awk-Printing e bez nového řádku a přidání čárky a https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. Nyní musíme tyto proměnné exportovat, ale xargs to nemůže udělat, protože to rozvětvuje podřízený proces, export musí být spuštěn v rámci aktuálního procesu. echo "export" ... vytvořte požadovaný příkaz a poté jej spusťte pomocí „. To je vše: str.

Komentáře

  • Vítejte v U & L SE. Možná můžete svůj příspěvek upravit a vysvětlit.
  • Není ' nesprávné předpokládat, že názvy proměnných prostředí budou sestávat pouze z az a AZ. Obvykle obsahují také podtržítka a číslice, takže vzor by byl [a-zA-Z_][a-zA-Z0-9_]*. Existují některé varianty tohoto založené na prostředí, které ' znovu používá, ale toto je bezpečný / přenosný přístup.
  • Dobrá poznámka @ChrisJohnson – aktualizováno!

Odpovědět

export můžete před název proměnné přidat pomocí awk a eval výsledný výstup:

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

Komentáře

  • printenv vytiskne proměnné, které jsou již exportovány. To také nezíská ' t pracovní podporu pokud existují proměnné, které obsahují znaky nového řádku.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *