En un terminal bash de Linux, a menudo hay muchas variables de entorno que se han establecido, como $PATH
y $HOME
.
¿Es posible ver todas las variables de entorno que se han establecido? ¿Cómo?
environment-variables
Cory Klein
fuente
fuente
Respuestas:
TL; DR: uso
(set -o posix ; set)
De acuerdo con el manual de Bash, puede usar el
set
comando incorporado para mostrar todas las variables de entorno que se han establecido. Elset
comando también mostrará las definiciones de cualquier función. Si solo desea ver las variables, y no las funciones, puede activar el modo POSIX antes de ejecutar el comando set. La forma más fácil de hacerlo es conset -o posix
, pero eso dejará el modo POSIX activado hasta que lo desactiveset +o posix
.Por lo tanto, el siguiente comando mostrará todas las variables de entorno definidas mediante el uso de un subshell sin afectar el cumplimiento de POSIX en su shell actual.
@RedGrittyBrick y @iglvzx sugirieron usar el
env
comando, sin embargo, este comando no proporcionará una lista completa de variables de entorno.env
solo mostrará los objetos valiosos que se han marcado para la exportación. Compare la salida deenv | sort
yexport -p
verá lo que quiero decir. Puede ejecutarcomm -23 <(set -o posix; set) <(env|sort)
si desea ver qué variables de entorno no se están exportando.La razón de la discrepancia es que
env
es un ejecutable separado en lugar deset
un comando incorporado de shell. De acuerdo con el manual de Bash, cuando se ejecuta un comando que no es un comando o función incorporado en el shell, solo recibirá variables de entorno que se han marcado para exportar en Bash . Hay muchas variables que no se exportan. Por lo tanto, si desea ver todas las variables que su shell ha definido, debe usar elset
comando como se indica en el manual.Puede probar fácilmente este comportamiento utilizando los siguientes comandos.
Verá que
set
proporciona salida mientrasenv
que no.fuente
El
env
comando sin argumentos imprimirá una lista de las variables de entorno "exportadas" y sus valores. Estas variables se hacen visibles para los subprocesos; muchas otras variables de entorno no se muestran con esto y solo se usan dentro del shell en ejecución, por ejemplo, para la configuración.fuente
printenv
, ya que ambosenv
yset
tienen otras funciones que simplemente dar salida al entorno.env
solo imprimirá una lista de variables de entorno que se hayan marcado para la exportación. No imprimirá todas las variables.imprime variables de shell (pero no los valores).
imprime variables exportadas, es decir, aquellas que se heredan mediante procesos que inicia este shell (pero no sus valores).
Diferencia entre el shell y las variables exportadas: https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
fuente
compgen -e
es exactamente lo que quería!