Estaba buscando env
mostrar todas las variables de entorno. Se me ocurrió emitir el comando set
y parece "transmitir" un script a la consola. ¿Por qué pasó esto?
Estepágina de referenciaNo parece explicarlo.
If no options or arguments are supplied, set displays the names
and values of all shell variables
Respuesta1
set
es un comando integrado del shell. Cuando emite eso en la línea de comando, ve todo en su entorno actual. Eso incluirá cualquier función que haya cargado. Tenga en cuenta que la mayoría de las distribuciones incluirán al menos algunas funciones útiles en los perfiles de shell, y si tiene instalada la finalización de bash, tendrá un montón de ellas.
env
es un binario. El shell lo carga y ejecuta, como cualquier otro comando. Por lo tanto, solo ve las variables de entorno que haya exportado, lo que debería excluir cualquier función de su entorno de shell.
Respuesta2
Como explicó Frank Schrijver en su comentario, el bash incorporado set
volcará todas las variables del shell (variables que sólo "existen" en ese tiempo de ejecución) y todasfunciones de shell también, nuevamente funciones inicializadas y existentes en ese proceso de shell en particular.
Entonces, por ejemplo, verá funciones como
_tilde ()
{
...
}
que es una función cuyo propósito es proporcionar tabulación en el ~
carácter para su editor de línea bash.
De hecho, incluso la documentación de bash set
, que se puede ver ejecutando el comando
man bash | less '+/^\s*set \[--'
no menciona el hecho de que imprime todas las funciones del Shell de forma predeterminada, pero como ha descubierto y otros lo han señalado, también imprime funciones del Shell.