establecer comando sin argumentos

establecer comando sin argumentos

Estaba buscando envmostrar todas las variables de entorno. Se me ocurrió emitir el comando sety 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

setes 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.

enves 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 setvolcará 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.

información relacionada