Domanda Come elencare tutti i nomi di variabili e i loro valori correnti?


Come elencare tutti i nomi di variabili e i loro valori correnti?

Compreso non solo $HOME, $PWD ecc. ma qualsiasi altro che hai definito.


295
2018-03-30 00:36


origine


superuser.com/questions/420295/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


risposte:


Immettere il seguente comando in un terminale per stampare tutte le variabili di ambiente:

printenv

Per ulteriori informazioni su questo comando, leggere il printenv pagina man.


Per mostrare una lista che include le "variabili di shell" puoi inserire il prossimo comando:

( set -o posix ; set ) | less

Questo ti mostrerà non solo le variabili di shell, ma anche le variabili di ambiente.

Per maggiori informazioni relative a questo argomento leggi:


417
2018-03-30 01:21



Se vado al terminal e scrivo MYNEWVARIABLE=Ubuntu ed esegui printenv non mostra lì. Perché è così, e come si presentano questi altri? - Strapakowsky
Probabilmente stai vedendo la differenza tra una variabile di shell e una variabile di ambiente. Provare export MYNEWVARIABLE=Ubuntu e funzionerà come ci si aspetta. - Rmano
se semplicemente esegui set, elenca anche la variabile creata da te. O fare set | grep myvar - Sergiy Kolodyazhnyy
printenv è un comando esterno, quindi conosce solo (e stampa) le variabili d'ambiente esportate. set è un comando bash interno, quindi mostra tutte le "variabili di shell" (variabili di ambiente non esportate) e le variabili di ambiente esportate. - Dan Pritts
Per espandere la risposta di @Rmano a @Strapakowsky ... Questo non funzionerà unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEWma questo lo farà unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEWe questo lo farà unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW. Usando export dice "la variabile che sto impostando dovrebbe essere parte dell'ambiente che viene passato ai processi, non solo una variabile in questa shell". Il mio terzo esempio dice che "la variabile dovrebbe essere parte dell'ambiente che viene passato a questo processo, ma non restare indietro in seguito". - Bruno Bronosky


So che questa domanda è abbastanza vecchia e ha risposto, ma penso di poter aggiungere un po 'di informazioni utili.

In tutti i metodi sopra descritti, la procedura suggerita è:

  • lanciare un terminale
  • mostra le variabili d'ambiente usando env, o printenv o qualsiasi altra cosa

Il problema di queste soluzioni è che stai vedendo le variabili di ambiente della shell in esecuzione nel terminale. Non stai vedendo le variabili di ambiente disponibili per un'esecuzione di un'applicazione, ad esempio direttamente dall'interfaccia grafica.

Questo è evidente se, ad esempio, usi il tuo ~/.profile, o .bashrc, o .zshenv (a seconda della shell) per modificare le variabili di ambiente --- come la classica aggiunta di directory al percorso.

Per vedere le variabili di ambiente disponibili per l'applicazione avviate direttamente nell'ambiente grafico, puoi fare quanto segue (in Gnome Shell, sono sicuro che c'è un metodo equivalente in tutti gli altri DE):

  • premi Alt-F2
  • eseguire il comando xterm -e bash --noprofile --norc

Ora hai un terminale con una shell che non ha aggiunto alcuna variabile di ambiente. Puoi usare env qui per elencare tutte le variabili d'ambiente:

Example of the bare shell

Ovviamente la nuova shell avrà le variabili di ambiente aggiunte dai file di sistema, ma tali variabili dovrebbero essere comunque disponibili (per ereditarietà) in tutti i programmi del sistema.

Sto postando questo perché è la quarta volta che devo cercare di nuovo questo trucco, controllando il mio .pam_environment file. Quindi ora lo troverò più velocemente (e nel processo spero di aiutare qualcun altro ...)


43
2017-10-12 00:37



Richiede che tu abbia un ambiente desktop, non utile per il client solo CLI del server. - K7AAY
Sì --- ma poi per CLI solo la risposta precedente è ok. Stavo solo rilevando che a volte è necessario verificare le variabili di ambiente disponibili per l'applicazione avviata dall'ambiente grafico, che non è lo stesso set che si vede quando si avvia un terminale in esso. Ad esempio, se stai cercando di capire perché la tua app Kile non può compilare un file LaTeX, mentre in un terminale puoi farlo, il trucco che ho postato qui aiuterà molto. - Rmano
Grazie per una risposta molto utile! Ho appena collegato ad esso help.ubuntu.com/community/... - Gunnar Hjalmarsson
Grazie. Mi hai raccomandato xterm -e bash --noprofile --norc perché i file di avvio non vengono letti ed eseguiti quando Ubuntu viene avviato con l'interfaccia grafica? Vedere askubuntu.com/q/1025845/1471 - Tim
In pratica, è solo un modo per avere una shell senza nulla di più delle variabili di ambiente disponibili per l'ambiente grafico. Un terminale standard leggerà (o rileggerà) .bashrc per esempio... - Rmano


Puoi vedere tutte le variabili con il declare incorporato.

declare -p

Se sei interessato solo alle variabili di ambiente, usa

declare -xp

Correre help declare per vedere quali sono le altre opzioni.


32
2018-04-04 20:28



questa è una soluzione molto più accurata di POSIXLY_CORRECT=1 set ed è anche degno di menzione declare è alias (in quel contesto) per typeset, un altro bash incorporato. - w17t


Per elencare le variabili di ambiente nel terminale con CTRL+ALT+T Puoi usare env comando.

per esempio :

[raja@localhost ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=3671
XDG_SESSION_ID=3
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1
GLADE_PIXMAP_PATH=:
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=xfce-
DESKTOP_STARTUP_ID=
HISTSIZE=1000
XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201
WINDOWID=65011716
GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2
IMSETTINGS_MODULE=none
QT_GRAPHICSSYSTEM_CHECKED=1
USER=raja

eccetera.

Spero possa aiutare.


11
2018-03-30 16:41



Ho notato che env manca alcune variabili o_O. in particolare dopo aver acquistato un file VAR = VAL. - ThorSummoner
@ThorSummoner La risposta qui potrebbe aiutare stackoverflow.com/questions/15474650/... - georaldc


In bash usando compgen:

compgen -v | while read line; do echo $line=${!line};done  

3
2018-04-11 20:53



Questa dovrebbe essere la risposta accettata, poiché tutti gli altri elencano più del solo nome. Nel mio caso alcune variabili contengono valori multilinea che rendono le altre soluzioni non fattibili. - Mene


ENV è un POSIX 7 vie:

export asdf=qwer
env | grep asdf

Uscita di esempio:

asdf=qwer

Mostra solo le variabili esportate: le variabili non esportate non sono generalmente considerate "variabili d'ambiente".

Preferisci questo printenv, che non è POSIX. Entrambi sembrano fare la stessa cosa senza argomenti: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv


2
2017-11-30 14:31



Già menzionato due anni fa: askubuntu.com/a/276162/158442 - muru
@muru abbastanza giusto. Vorrei averlo fatto env più visibile con una migliore formattazione e ho aggiunto più informazioni. - Ciro Santilli 新疆改造中心 六四事件 法轮功
Questo è ciò che la modifica è per. - muru


Se si desidera una variabile d'ambiente specifica, piuttosto che stamparli tutti con printenv, puoi ad esempio stamparlo facendo echo "$PWD"


0
2018-01-08 14:13