nodeのバージョン管理をnaveを使って優雅に使いこなそうとして
$ ./nave.sh use stableとかカッコ付けてやると
$ Already installed: 0.6.14 using 0.6.14 /bin/zsh: no such option: rcfileとか出て「マジでか!?」ってなる人へ。
nave use latest: zsh no such option rcfile - Linux LABS
にあるように実行ユーザのシェルをbashに変えちゃうという方法もありますが。
nave.shを見てみると
$ vim nave.sh ------------------------------- 408: "$SHELL" --rcfile "$NAVE_DIR/naverc" 〜(中略)〜 464: "$SHELL" --rcfile "$NAVE_DIR/naverc"と2ヶ所rcfileオプションを使ってる場所があります。
そもそもrcfileオプションはbashで使えるオプションで、コマンドラインでシェルを使う場合に設定ファイルとして読み込むファイルを指定できるオプションです。
つまり上記のnave.shでは
bash --rcfile ~/.nave/navercのように"~/.nave/naverc"を読み込んで対話型bashを使う、というようにプログラムされているのですが、
実行ユーザのシェルがbash以外だと$SHELLがzshなりtcshなりに展開されて、意図しない動きになっちゃう訳です。
僕が普段使うzshは--rcfileというオプションが使えません。
基本的にログイン時は
$ZDOTDIR/.zshenv $ZDOTDIR/.zprofile $ZDOTDIR/.zshrc $ZDOTDIR/.zloginこれらのファイルが読み込まれるのですが、全部が全部ログイン時に読み込まれるわけではなく、詳しくは
zsh - watallica metallicus
を参照のこと。
今回は .zshrc に設定することにします。
# 以下の方法は正しい動作を保証するものではありません。
# とりあえず動くように設定していますので、安定性を重視する場合は実行ユーザのログインシェルをbashにしておき、配布されたソースプログラムは変更しない事をお勧めします。
という訳で、書き換えちゃいましょう。
$ vim nave.sh ------------------------- # nave_use () 内 397: else 398: hash -r 399: NAVELVL=$lvl NAME="$version" ¥ 400: NAVEPATH="$bin" ¥ 401: NAVEVERSION="$version" ¥ 402: NAVENAME="$version" ¥ 403: npm_config_binroot="$bin" npm_config_root="$lib" ¥ 404: npm_config_manroot="$man" ¥ 405: npm_config_prefix="$prefix" ¥ 406: NODE_PATH="$lib" ¥ 407: NAVE_LOGIN="1" ¥ 408: "$SHELL" 409: #"$SHELL" --rcfile "$NAVE_DIR/naverc"コレでよしと。
次にnave用のzshが起動されたときの処理を.zshrcに書きます。
$ vim ~/.zshrc
------------------------------------
# 追加 if [ "$NAVE_LOGIN" = "1" ]; then export PATH=$NAVEPATH:$PATH fi
これで準備完了です。
あとは優雅に
$ nave.sh use stableと打つべし。
以上でぇぇぇえぇぇす。
0 件のコメント:
コメントを投稿