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?
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?
Respuestas:
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.
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.
printenv, ya que ambos envy settienen otras funciones que simplemente dar salida al entorno.
envsolo imprimirá una lista de variables de entorno que se hayan marcado para la exportación. No imprimirá todas las variables.
compgen -v
imprime variables de shell (pero no los valores).
compgen -e
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
compgen -ees exactamente lo que quería!