Como definir funções globais em zsh (macOS) que estão disponíveis em scripts?

Como definir funções globais em zsh (macOS) que estão disponíveis em scripts?

Desde o macOS 10.15 (Catalina), o shell padrão mudou de bash para zsh. Uma das coisas que estou enfrentando é que não consigo fazer minhas próprias funções globais funcionarem. Eu costumava exportá-los de .bash_profile, mas zsh parece não conhecer o conceito de exportação de funções.

Digamos que eu tenha isso:

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

Se eu executar hello RocketNutsno shell, ele diz Hello RocketNuts, how are you today. Até agora tudo bem.

Agora quero tornar esta função globalpara que também esteja disponível em scripts.

Eu tentei:

  • colocando-o.zshrc
  • colocando-o.zshenv

Também tentei criar um subdiretório ~/myfunctionse um arquivo chamado ~/myfunctions/greetque contém:

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

e então em ~/.zshrcou ~/.zshenveu adiciono:

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

No entanto, nenhum desses métodos disponibiliza a greetfunção em scripts.

Do shell, todos funcionam bem. Com qualquer um dos métodos, posso invocar a greetfunção manualmente no shell.

Mas se eu tiver um arquivo test.shque faça greet Somebodyisso, ele sempre diz "saudação: comando não encontrado".

Como faço para que isso funcione no zsh?

informação relacionada