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?
                    
                        environment-variables
                                
                    
                    
                        Cory Klein
fuente
                
                fuente

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. Elsetcomando 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
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 deenv | sortyexport -pverá 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
enves un ejecutable separado en lugar desetun 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 elsetcomando como se indica en el manual.Puede probar fácilmente este comportamiento utilizando los siguientes comandos.
Verá que
setproporciona salida mientrasenvque no.fuente
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.fuente
printenv, ya que ambosenvysettienen 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.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 -ees exactamente lo que quería!