2019/02/20

zsh で c flag を指定すると .zshrc が読み込まれない

.zshrc に定義している function f を zsh -c 'f' 等で実行したいが、 f が無いとエラーが発生する。
なお、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 を書けば良い。


環境

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

0 件のコメント:

コメントを投稿