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 で動作させるにはどうすればよいですか?