2019/02/20

zsh -l で .zshrc の内容が読み込まれない

.zshrc に function fを定義していて、zsh -c 'f' とかで function fを呼び出したい時を想定。
問題: zsh を起動して打つ分にはその function が使えるが、zsh -c にするとf が見つからないと言われる。


結論

.zshrc ではなく .zprofile に書いて zsh -l -c 'f' とする


zsh -l について

-l option は LOGIN option (see man zshoptions)。
login shell として zsh を起動する。
-l を省いた時と異なり設定ファイルをいくらか読みにいくようだ。


.zprofile と .zshrc

ここによると
  • .zprofile: login 時に読み込まれる
  • .zshrc: terminal session が発生した時に読み込まれる
ので、.zshrc に function を定義していると login 時には読み込まれない。
なので zsh -l で function を呼びたかったら .zprofile に書けば良い。


環境

  • OS: macOS Sierra 10.12.6
  • zsh: 5.7.1 (x86_64-apple-darwin16.7.0)