¿Cómo enumerar todos los nombres de variables y sus valores actuales?
Incluyendo no solo $HOME
, $PWD
etc. , 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
printenv
pá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
zshoptions
página de manual .fuente
MYNEWVARIABLE=Ubuntu
y ejecutoprintenv
, no se muestra allí. ¿Por qué es eso y cómo aparecen esos otros?export MYNEWVARIABLE=Ubuntu
y funcionará como esperas.set
, también enumera la variable creada por usted. O hacerset | grep myvar
printenv
es un comando externo, por lo que solo conoce (e imprime) las variables de entorno exportadas.set
es 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
,printenv
o 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
env
aquí 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_environment
archivo. Así que ahora lo encontraré más rápido (y en el proceso, espero ayudar a alguien más ...)fuente
xterm -e bash --noprofile --norc
porque 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 --norc
Puede ver todas las variables con el
declare
incorporado.Si solo le interesan las variables de entorno, use
Corre
help declare
para ver cuáles son las otras opciones.fuente
POSIXLY_CORRECT=1 set
y también es digna de mencionar quedeclare
esalias
(en ese contexto) paratypeset
, otro bash incorporado.Para enumerar las variables de entorno en la terminal con CTRL+ ALT+ T, puede usar el
env
comando.por ejemplo :
etc.
Espero que ayude.
fuente
En bash usando compgen:
fuente
compgen -v | while read line; do declare -p $line; done
La 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
env
má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