¿Cómo enumerar todos los nombres de variables y sus valores actuales?
Incluyendo no solo $HOME, $PWDetc. , sino cualquier otro que haya definido.
command-line
bash
environment-variables
Strapakowsky
fuente
fuente

Respuestas:
Para bash: (el shell estándar en Ubuntu)
Ingrese el siguiente comando en una terminal para imprimir todas las variables de entorno:
Para obtener más información sobre este comando, lea la
printenvpágina de manual .Para mostrar una lista que incluya las "variables de shell" puede ingresar el siguiente comando:
Esto le mostrará no solo las variables de shell, sino también las variables de entorno.
Para obtener más información relacionada con este tema, lea:
Para zsh: (un shell avanzado)
Use el siguiente comando:
Para obtener más información sobre las opciones de ZSH, consulte la
zshoptionspágina de manual .fuente
MYNEWVARIABLE=Ubuntuy ejecutoprintenv, no se muestra allí. ¿Por qué es eso y cómo aparecen esos otros?export MYNEWVARIABLE=Ubuntuy funcionará como esperas.set, también enumera la variable creada por usted. O hacerset | grep myvarprintenves un comando externo, por lo que solo conoce (e imprime) las variables de entorno exportadas.setes un comando bash interno, por lo que muestra todas las "variables de shell" (variables de entorno no exportadas), así como las variables de entorno exportadas.unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, pero síunset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW, y esto síunset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW. El uso de export dice "la variable que estoy configurando debe ser parte del entorno que se pasa a los procesos, no solo una variable en este shell". Mi tercer ejemplo dice que "la variable debería ser parte del entorno que se pasa a ESTE proceso, pero no quedarse después".Sé que esta pregunta es bastante antigua y respondió, pero creo que puedo agregar un poco de información útil.
En todos los métodos descritos anteriormente, el procedimiento sugerido es:
env,printenvo lo que seaEl problema de estas soluciones es que está viendo las variables de entorno del shell que se ejecuta en el terminal . No está viendo las variables de entorno disponibles para una aplicación ejecutada, por ejemplo, directamente por la interfaz gráfica.
Esto es notable si, por ejemplo, usa su
~/.profile, o.bashrc, o.zshenv(dependiendo de su shell) para modificar las variables de entorno --- como la clásica adición de directorios a la ruta.Para ver las variables de entorno disponibles para la aplicación iniciadas directamente en el entorno gráfico, puede hacer lo siguiente (en Gnome Shell, estoy seguro de que hay un método equivalente en todos los demás DE):
xterm -e bash --noprofile --norc(O, si no lo tienes
xterm,gnome-terminal -- bash --noprofile --norc--- gracias a @Mike Nakis por el comentario).Ahora tiene un terminal con un shell que no agregó ninguna variable de entorno. Puede usar
envaquí para enumerar todas sus variables de entorno:Obviamente, el nuevo shell tendrá las variables de entorno agregadas por los archivos del sistema, pero esas variables deberían estar disponibles (por herencia) para todos los programas en el sistema de todos modos.
Estoy publicando esto porque es la cuarta vez que tengo que buscar este truco nuevamente, revisando mi
.pam_environmentarchivo. Así que ahora lo encontraré más rápido (y en el proceso, espero ayudar a alguien más ...)fuente
xterm -e bash --noprofile --norcporque los archivos de inicio no se leen y ejecutan cuando Ubuntu se inicia con la interfaz gráfica? Ver askubuntu.com/q/1025845/1471gnome-terminal -- bash --noprofile --norcPuede ver todas las variables con el
declareincorporado.Si solo le interesan las variables de entorno, use
Corre
help declarepara ver cuáles son las otras opciones.fuente
POSIXLY_CORRECT=1 sety también es digna de mencionar quedeclareesalias(en ese contexto) paratypeset, otro bash incorporado.Para enumerar las variables de entorno en la terminal con CTRL+ ALT+ T, puede usar el
envcomando.por ejemplo :
etc.
Espero que ayude.
fuente
En bash usando compgen:
fuente
compgen -v | while read line; do declare -p $line; doneLa mayoría de las soluciones aquí imprimen solo variables de entorno o tienen el inconveniente de que env o (set -o posix; posix) no imprimen valores en forma analizable (intente imprimir la variable A = $ 'a \ r \ nb' ...) .
Aquí hay una función que imprimirá todas las variables, una variable por línea, en la forma de escape POSIX:
Gracias a @tmgoblin por señalar el uso de compgen -v.
fuente
env es una manera POSIX 7 :
Salida de muestra:
Solo muestra las variables exportadas: las variables no exportadas generalmente no se consideran "variables de entorno".
Prefiero eso sobre
printenv, que no es POSIX. Ambos parecen hacer lo mismo sin argumentos: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenvfuente
envmás visible con un mejor formato, y he agregado más información.Si desea una variable de entorno específica, en lugar de imprimirlas todas
printenv, puede imprimirla haciendoecho "$PWD"fuente
printenv solo enumera las variables exportadas, command+ alt+ $ ("\ e $": complete-variable) enumerará todas las variables.
fuente