Cómo hacer que el comando "set" de UNIX imprima solo variables de entorno

Cómo hacer que el comando "set" de UNIX imprima solo variables de entorno

Estoy acostumbrado a que el setcomando bash muestre solo una lista de las configuraciones del entorno, por ejemplo. RUTA y tal.

Sin embargo, en un sistema Ubuntu que acabo de configurar, al ejecutarlo setse volcan 2000 líneas de texto, incluidas muchas funciones como esta:

dequote () 
{ 
    eval printf %s "$1" 2> /dev/null
}

¿Cómo imprimo solo las variables de entorno?

Respuesta1

Por defecto setmuestra elvariables de shell, no solo las variables de entorno. En bashfunciones se consideran parte de las variables. Verhttps://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference.

Si usas envo printenvte mostrarán elambienteexportado a procesos secundarios, que no esnecesariamenteLo mismo que su bashentorno:

$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1

El bash declarey typesetlas funciones integradas pueden enumerar todo tipo de variables, para omitir funciones:

declare -F

La salida de estos tiene un formato adecuado para recrear el estado en un script de shell, por lo que es un poco detallado, aunque se puede distinguir entre matrices, números enteros y otros tipos (según la versión). Vea también el resultado de export -p.

Y dehttps://stackoverflow.com/questions/1305237/how-to-list-variables-declared-in-script-in-bash puedes decirle a bash que use el modo POSIX y setse comporte "correctamente":

( set -o posix ; set ) 

Se ejecuta en un subshell para que no altere el shell en ejecución y recoge correctamente las variables que aún no se han exportado al entorno heredado.

Respuesta2

Si desea enumerar todas las variables de entorno, simplemente ingrese env.

información relacionada