¿Cómo definir funciones globales en zsh (macOS) que están disponibles en scripts?

¿Cómo definir funciones globales en zsh (macOS) que están disponibles en scripts?

Desde macOS 10.15 (Catalina), el shell predeterminado cambió de bash a zsh. Una de las cosas con las que me encuentro es que no puedo hacer funcionar mis propias funciones globales. Solía ​​exportarlos desde .bash_profile pero zsh no parece conocer el concepto de exportar funciones.

Di que tengo esto:

function greet { echo "Hello $1, how are you today" }

Si luego ejecuto hello RocketNutsen el shell, dice Hello RocketNuts, how are you today. Hasta ahora, todo bien.

Ahora quiero que esta función sea global.para que también esté disponible en scripts.

Yo he tratado:

  • poniéndolo en.zshrc
  • poniéndolo en.zshenv

También intenté crear un subdirectorio ~/myfunctionsy un archivo llamado ~/myfunctions/greetque contiene:

function greet { echo "Hello $1, how are you today" }
greet "$@"

y luego en cualquiera ~/.zshrco ~/.zshenvagrego:

fpath=( ~/myfunctions "${fpath[@]}" )
autoload -Uz greet

Sin embargo, ninguno de estos métodos hace que la greetfunción esté disponible en scripts.

Desde el principio, todos funcionan bien. Con cualquiera de los métodos, puedo invocar la greetfunción manualmente en el shell.

Pero si tengo un archivo test.shque lo hace greet Somebodyy lo ejecuto, siempre dice "saludo: comando no encontrado".

¿Cómo hago para que esto funcione en zsh?

información relacionada