¿Cómo veo una lista de todas las variables de entorno definidas actualmente en un terminal bash de Linux?

31

En un terminal bash de Linux, a menudo hay muchas variables de entorno que se han establecido, como $PATHy $HOME.

¿Es posible ver todas las variables de entorno que se han establecido? ¿Cómo?

Cory Klein
fuente
1
askubuntu.com/questions/275965/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

32

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


De acuerdo con el manual de Bash, puede usar el setcomando incorporado para mostrar todas las variables de entorno que se han establecido. El setcomando 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 con set -o posix, pero eso dejará el modo POSIX activado hasta que lo desactive set +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.

(set -o posix ; set)

@RedGrittyBrick y @iglvzx sugirieron usar el envcomando, sin embargo, este comando no proporcionará una lista completa de variables de entorno. envsolo mostrará los objetos valiosos que se han marcado para la exportación. Compare la salida de env | sorty export -pverá lo que quiero decir. Puede ejecutar comm -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 enves un ejecutable separado en lugar de setun 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 el setcomando como se indica en el manual.

Puede probar fácilmente este comportamiento utilizando los siguientes comandos.

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

Verá que setproporciona salida mientras envque no.

Estrella de mar
fuente
24

El envcomando 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.

RedGrittyBrick
fuente
10
Prefiero printenv, ya que ambos envy settienen otras funciones que simplemente dar salida al entorno.
iglvzx
3
envsolo imprimirá una lista de variables de entorno que se hayan marcado para la exportación. No imprimirá todas las variables.
Starfish
44
@Starfish tiene razón, eso significa que esta respuesta aceptada fue muy incorrecta. Editado para decir que solo enumera las variables exportadas.
Volker Siegel