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 RocketNuts
en 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 ~/myfunctions
y un archivo llamado ~/myfunctions/greet
que contiene:
function greet { echo "Hello $1, how are you today" }
greet "$@"
y luego en cualquiera ~/.zshrc
o ~/.zshenv
agrego:
fpath=( ~/myfunctions "${fpath[@]}" )
autoload -Uz greet
Sin embargo, ninguno de estos métodos hace que la greet
función esté disponible en scripts.
Desde el principio, todos funcionan bien. Con cualquiera de los métodos, puedo invocar la greet
función manualmente en el shell.
Pero si tengo un archivo test.sh
que lo hace greet Somebody
y lo ejecuto, siempre dice "saludo: comando no encontrado".
¿Cómo hago para que esto funcione en zsh?