Come esportare le variabili impostate, tutte in una volta? Il comando

set visualizza tutte le variabili locali come di seguito. Come faccio a esportare queste variabili tutte in una volta?

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

Commenti

  • cosa intendi per esportazione tutto in una volta? puoi utilizzare i punti e virgola per definire in una riga … come a = 123; b = " asd asd "; c = " hello world "
  • Molto simile a unix.stackexchange .com / q / 79064/4667
  • set mostra anche funzioni e variabili di sistema come BASH_VERSION
  • La tua domanda non è chiara . È un estratto del set output che ' stai mostrando? In tal caso, ' non è bash '. Vuoi esportare tutte le variabili attualmente impostate comprese le variabili di shell speciali? Oppure solo quelle 3 variabili come in export a b c?
  • export ${!T*} esporterebbe qualsiasi parametro definito il cui nome inizia con T. Sfortunatamente, ' non sembra essere un modo per generare facilmente un elenco di tutti parametri definiti.

Risposta

Esegui il seguente comando, prima di impostare le variabili:

set -a 

man pagina:

-a
Quando questa opzione è attiva, lattributo di esportazione deve essere impostato per ogni variabile a cui viene eseguita unassegnazione;

Per disattivare questa opzione, eseguire set +a in seguito.

Esempio:

set -a . ./environment set +a 

Dove environment contiene:

FOO=BAR BAS="quote when using spaces" 

Commenti

  • Questo deve essere abilitato prima dellassegnazione alle variabili, però. ' non fa nulla alle variabili assegnate in precedenza.
  • @chepner, grazie mi sono dimenticato di dirlo !!
  • Anche questo automaticamente esporta le funzioni nello stesso modo di function example(){ echo good; }; export -f example

Answer

Funziona se la tua shell è bash (possibilmente 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 collegare la shell corrente con tutti quei problemi di env vars

source /my/env/var/file 

Risposta

`echo "export" $((set -o posix ; set)|awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}")` 
  1. Innanzitutto, recupera tutte le variabili di 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 uno spazio: awk -F "=" "BEGIN{ORS=" "}1 $1~/[a-zA-Z_][a-zA-Z0-9_]*/ {print $1}" Riferimento: valore della colonna awk-Printing e senza nuova riga e aggiunta di virgola e https://stackoverflow.com/questions/14212993/regular-expression-to-match-a-pattern-inside-awk-command

  3. Ora, dobbiamo esportare queste variabili, ma xargs non può farlo perché esegue il fork del processo figlio, lesportazione deve essere eseguita nel processo corrente. echo "export" ... crea un comando che vogliamo, quindi usa “ per eseguirlo. Questo è tutto: p.

Commenti

  • Benvenuti a U & L SE. Forse puoi modificare il tuo messaggio e dare qualche spiegazione.
  • Non è ' corretto presumere che i nomi delle variabili di ambiente siano costituiti esclusivamente da az e AZ. Di solito includono anche caratteri di sottolineatura e cifre, quindi il modello sarebbe [a-zA-Z_][a-zA-Z0-9_]*. Ci sono alcune variazioni in base alla shell che ' stai utilizzando, ma questo è lapproccio sicuro / portatile.
  • Buon punto @ChrisJohnson – aggiornato!

Risposta

Puoi anteporre export al nome della variabile tramite awk e eval loutput risultante:

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

Commenti

  • printenv stampa le variabili che sono già esportate. Anche questo ' non funzionerà erly se ci sono variabili che contengono caratteri di nuova riga.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *