Come esportare le variabili impostate, tutte in una volta?


39

setcomando visualizza tutte le variabili locali come di seguito. Come posso esportare queste variabili tutte in una volta?

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

cosa intendi per esportazione tutto in una volta? puoi usare i punti e virgola per definire in una riga ... come a = 123; b = "asd asd"; c = "ciao mondo"
Raza,


2
setvisualizza anche funzioni e variabili di sistema come BASH_VERSION
glenn jackman,

La tua domanda non è chiara È un estratto setdell'output che stai mostrando? Se è così, allora non lo bashè. Vuoi esportare tutte le variabili attualmente impostate, comprese le variabili shell speciali? O solo quelle 3 variabili come in export a b c?
Stéphane Chazelas,

export ${!T*}esporterebbe qualsiasi parametro definito il cui nome inizia con T. Sfortunatamente, non sembra esserci un modo per generare facilmente un elenco di tutti i parametri definiti.
Chepner,

Risposte:


72

Eseguire il comando seguente, prima di impostare le variabili:

set -a 

pagina man:

-a
Quando questa opzione è attiva, l'attributo di esportazione deve essere impostato per ogni variabile a cui viene eseguita un'assegnazione;

Per disattivare questa opzione, esegui in set +aseguito.

Esempio:

set -a
. ./environment
set +a

Dove environmentcontiene:

FOO=BAR
BAS='quote when using spaces'

13
Tuttavia, questo deve essere abilitato prima di assegnare alle variabili. Non fa nulla alle variabili precedentemente assegnate.
Chepner,

1
@chepner, grazie ho dimenticato di dirlo !!
nitin,

Questo esporta automaticamente le funzioni allo stesso modo difunction example(){ echo good; }; export -f example
Oliver I

5
`echo "export" $((set -o posix ; set)|awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}')`
  1. Innanzitutto, ottieni tutte le variabili d'ambiente impostate: (set -o posix ; set) Riferimento: https://superuser.com/questions/420295/how-do-i-see-a-list-of-all-currently-defined-environment-variables-in-a- linux-ba

  2. Ottieni tutti i nomi delle variabili di ambiente, separati da spazio: awk -F "=" 'BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}' Riferimento: awk-Stampa valore colonna senza nuova riga e aggiunta di virgola e https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside- awk comando

  3. Ora, abbiamo bisogno di esportare queste variabili, ma xargs non può farlo perché forgia il processo figlio, l'esportazione deve essere eseguita con il processo corrente. echo "export" ...costruisci un comando che vogliamo, quindi usa `` per eseguirlo. Questo è tutto: p.


Benvenuto a U&L SE. Forse puoi modificare il tuo post e dare alcune spiegazioni.
Archemar,

1
Non è corretto supporre che i nomi delle variabili di ambiente siano costituiti esclusivamente da az e AZ. Includono comunemente anche caratteri di sottolineatura e cifre, quindi lo schema sarebbe [a-zA-Z_][a-zA-Z0-9_]*. Ci sono alcune variazioni su questo in base alla shell che stai usando, ma questo è l'approccio sicuro / portatile.
Chris Johnson,

Buon punto @ChrisJohnson - aggiornato!
Wil Moore III,

3

Puoi anteporre exportal nome della variabile tramite awke evall'output risultante:

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

2
printenvstampa le variabili che sono già state esportate. Anche questo non funzionerà correttamente se ci sono variabili che contengono caratteri di nuova riga.
Stéphane Chazelas,

2

Funziona se la tua shell è bash (forse anche altre shell)

export > /my/env/var/file

il tuo nuovo file conterrà un dump di tutte le variabili attualmente definite ... con voci come

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"

quindi per caricare la shell corrente con tutte quelle problematiche ambientali

source  /my/env/var/file
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.