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
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}")`
-
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 -
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 -
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.
set
mostra anche funzioni e variabili di sistema come BASH_VERSIONset
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 inexport a b c
?export ${!T*}
esporterebbe qualsiasi parametro definito il cui nome inizia conT
. Sfortunatamente, ' non sembra essere un modo per generare facilmente un elenco di tutti parametri definiti.