Come posso vedere un elenco di tutte le variabili d'ambiente attualmente definite in un terminale Linux bash?


Risposte:


32

TL; DR: usare(set -o posix ; set)


Secondo il manuale di Bash puoi usare il setcomando integrato per mostrare tutte le variabili d'ambiente che sono state impostate. Il setcomando mostrerà anche le definizioni di qualsiasi funzione. Se si desidera visualizzare solo le variabili e non le funzioni, è possibile attivare la modalità POSIX prima di eseguire il comando set. Il modo più semplice per farlo è con set -o posix, ma che lascerà attiva la modalità POSIX fino a quando non la spegni set +o posix.

Pertanto, il comando seguente mostrerà tutte le variabili d'ambiente definite usando una subshell senza influire sulla conformità POSIX nella shell corrente.

(set -o posix ; set)

@RedGrittyBrick e @iglvzx hanno suggerito di utilizzare il envcomando, tuttavia questo comando non fornirà un elenco completo delle variabili di ambiente. envmostrerà solo le variabili che sono state contrassegnate per l'esportazione. Confronta l'output di env | sorte export -pvedrai cosa intendo. È possibile eseguire comm -23 <(set -o posix; set) <(env|sort)se si desidera vedere quali variabili di ambiente non vengono esportate.

Il motivo della discrepanza è che envè un eseguibile separato rispetto al setquale è un comando incorporato della shell. Secondo il manuale di Bash, quando viene eseguito un comando che non è un comando o una funzione incorporati nella shell, riceverà solo variabili di ambiente che sono state contrassegnate per l'esportazione in Bash . Esistono molte variabili che non vengono esportate. Pertanto, se si desidera visualizzare tutte le variabili definite dalla shell, è necessario utilizzare il setcomando come indicato nel manuale.

Puoi facilmente provare questo comportamento da solo usando i seguenti comandi.

MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE

Vedrai che setfornisce output mentre envnon lo è.


24

Il envcomando senza argomenti stamperà un elenco delle variabili di ambiente "esportate" e dei loro valori. Queste variabili sono rese visibili ai sottoprocessi - molte altre variabili d'ambiente non sono mostrate con questo, e sono usate solo all'interno della shell in esecuzione, ad es. Per la configurazione.


10
Io preferisco printenv, dal momento che entrambi enve sethanno altre funzioni che solo l'emissione nell'ambiente.
iglvzx,

3
envstamperà solo un elenco di variabili d'ambiente che sono state contrassegnate per l'esportazione. Non stamperà tutte le variabili.
Starfish,

4
@Starfish ha ragione - ciò significa che questa risposta accettata era molto sbagliata. Modificato per dire che elenca solo le variabili esportate.
Volker Siegel,

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.