LoginSignup
17
18

More than 5 years have passed since last update.

zsh, plenv(rbenv), parallel

Last updated at Posted at 2013-07-31

読むべき人

  • .zshrcに export PATH= を全部書いてる人
  • .zshrcの中で eval (plenv init -) をやってる人
  • .plenv/shimsを明示的に$PATHに追加してない人

どれか当てはまったらいつかハマるかも.

  • process fork してperl 呼ぶと system perl が呼ばれちゃう人

の助けになるかも.

  • 「vim quickrunでplenv(rbenv)のperl(ruby)が呼ばれてない!」

って人も助かるかも.

GNU parallelを使って並列処理する機会がありハマったのでめもしておきます.

問題

zshの設定ファイルには.zshenv, .zprofile, .zshrc等がありますが,それぞれ読まれ方が違います.
参考:http://news.mynavi.jp/column/zsh/001/index.html

zsh hogehoge.sh

とかやった場合は.zshenvしか読まれないようです.

ここで気になるのはPATHがどうなるかですが,.zshenvに書いてなければ当然exportされません.
通したはずのPATHが通ってない!と困ることになります.
また perl の error では @INC に module への path がないよ!みたいな感じになります.

あと plenv を init する際に plenv の perl の path が export されるので,.zshenv に plenv init を書いてる人は問題が起きません.

sub CMD_init {
    home_init();
    print <<"...";
export PATH="$PLENV_HOME/shims:\${PATH}"
...
}

ただし.zshenv が読まれるたびに plenv init するのでオーバーヘッドが気になります.
oh-my-zsh 使ってると oh-my-zsh バージョンチェックのために zsh コマンドを使っていてそのタイミングでも plenv init するので余計気になります.
(そもそもoh-my-zshをマニュアル通りにインストールして使おうとすると .zshrc 読まないと .zshenv の内容読めないような気がするんだけどどうなんだろう…)

解決

  • zsh の設定ファイルがそれぞれいつ読まれるのか把握する
  • .plenv/shims も $PATH に入れとく
  • export PATH を .zshenv に書く
  • plenv init は .zshrc に書く

いろいろ試した結果これがいいかなあと思います.

2013-07-04追記

tmux使ってて新しいタブ開くと.zshenvが二回読まれててなんだろなとおもってたんですが,.tmux.confで

set-option -g default-command "reattach-to-user-namespace -l zsh"

としてzsh起動してました.
謎が解けた.

2013-07-08追記

まったく意識せずに書いてましたが私の環境では plenv を homebrew で入れてます.
なので

`brew --prefix`/bin

に plenv 自体のシンボリックリンクがある状態です.

git clone git://github.com/tokuhirom/plenv.git ~/.plenv

した場合には,.zshenv か .zshrc の plenv init する前に

export PATH=$HOME/.plenv/bin:$PATH

を書いとかないと login 時に plenv 自体が見つからずに init できませんので注意が必要です.

17
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18