なお、Terminal.app から起動した zsh では f は実行可能。
結論
function を .zshrc ではなく .zprofile に書いて zsh -l -c 'f' とする。(もしくは zsh -lc 'f')
zsh の -l option について
-l option は LOGIN option (man zshoptions)で、login shell として zsh を起動する。
何も指定しない場合と異なり、設定ファイルをいくつか読み込む。その中に .zprofile が含まれている。
.zprofile と .zshrc の読み込まれるタイミング
この質問に対する解答によれば
- .zprofile: login 時に読み込まれる
- .zshrc: terminal session が発生した時に読み込まれる
との事。つまり、 zsh -c では .zprofile も .zshrc も読み込まれない。
そこに -l を追加して .zprofile が読み込まれるようにする。そこに function を書けば良い。
そこに -l を追加して .zprofile が読み込まれるようにする。そこに function を書けば良い。
環境
- OS: macOS Sierra 10.12.6
- zsh: 5.7.1 (x86_64-apple-darwin16.7.0)