without update chsh arch zsh

zsh - update - Z Shell "autoload" incorporado: ¿para qué sirve?



zsh vs bash (1)

He estado usando el shell Z por un tiempo y estoy empezando a sentir curiosidad. Una cosa en la que he tropezado al escribir mis propias funciones es "autoload".

De acuerdo con la página de manual de zshbuiltins (1), la autoload es "equivalente a las functions -u " (con una excepción), que es "equivalente a la typeset -f " (con una excepción). Sin embargo, después de ver el uso de carga automática de, digamos functions/Prompts/promptinit solicitud de inicio, creo que tengo una idea de lo que hace.

Pienso en la carga automática como, bueno, tipo de declaración de "importación".

Pero, ¿por qué "autoload foo" es superior a "source bar"? No entiendo eso


Como se indica en la documentación de zsh :

Una función se puede marcar como no definida utilizando la función de carga automática (o functions -u o typeset -fu ). Tal función no tiene cuerpo. Cuando la función se ejecuta por primera vez, el shell busca su definición utilizando los elementos de la variable fpath . [...]

autoload permite que las funciones se especifiquen sin un cuerpo que luego se cargue automáticamente cuando se use;)

sin embargo, source toma como argumento un script que luego se executed en el entorno de la sesión actual, es decir, conservará todos los cambios que el script realice en el entorno, lo cual no es el caso cuando se ejecuta el script.

Creo que esta característica es beneficiosa cuando se tienen muchas utilidades en funciones. Permite un inicio más rápido (no es necesario cargar todo el código para las funciones de carga automática) y puede mantener más pequeña la huella de memoria del shell.