スクリプトで使用できるグローバル関数を zsh (macOS) で定義するにはどうすればよいですか?

スクリプトで使用できるグローバル関数を zsh (macOS) で定義するにはどうすればよいですか?

macOS 10.15 (Catalina) 以降、デフォルトのシェルが bash から zsh に変更されました。私が直面している問題の 1 つは、独自のグローバル関数が動作しないことです。以前はこれらを .bash_profile からエクスポートしていましたが、zsh は関数のエクスポートの概念を認識していないようです。

たとえば、次のようなものがあります:

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

hello RocketNutsその後、シェルを実行すると、 と表示されますHello RocketNuts, how are you today。ここまでは順調です。

この関数をグローバルにしたいスクリプトでも利用できるように

私が試してみました:

  • 入れる.zshrc
  • 入れる.zshenv

また、次の内容を含むサブディレクトリ~/myfunctionsとファイルの作成も試みました~/myfunctions/greet:

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

そして、 または~/.zshrcのいずれかに~/.zshenv以下を追加します。

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

ただし、これらの方法のいずれも、greetスクリプト内で関数を使用できるようにしません。

シェルからは、すべて正常に動作します。どちらの方法でも、greetシェル上で関数を手動で呼び出すことができます。

test.shしかし、そのようなファイルがありgreet Somebody、それを実行すると、常に「greet: command not found」というメッセージが表示されます。

これを zsh で動作させるにはどうすればよいですか?

関連情報