npm / rbenv / pyenv みたいな感じの bashenv がほしい。
npm などを ディレクトリ単位で切り替えていると、どうしてもbashrc と整合性が合わなくなる時がある。
そのために、ディレクトリ単位でシェルの設定やエイリアスを切り替えられると便利だよね。
ってことで調べたてたら見つけたのでメモ
インストールと利用
brew install direnv
初期設定
eval "$(direnv hook bash)"
必要であれば、.bashrc に追記する。
利用
適当な作業用ディレクトリ(ここでは /tmp 、普段は Project フォルダ)に入る
takuya@$ cd /tmp takuya@tmp$ mkdir tmp
direnv を有効にする
takuya@tmp$ direnv allow .
環境変数を設定した $DIR/.envrc を作る
カレントディレクトリに作った時点で即時にロードされてカッコイイ。
takuya@tmp$ echo "export foo=bar" > .envrc direnv: loading .envrc direnv: export +foo
takuya@tmp$ cd ~ direnv: unloading takuya@~$
takuya@~$ cd - /tmp/tmp direnv: loading .envrc direnv: export +foo
便利な点
毎回まいかい、source 叩かなくて良くなって嬉しい。
しかも、元の環境に戻してくれる。便利。
さらなる便利な点。
環境変数が名前かぶってたらどうなるのかな?
takuya@~$ cd ~ takuya@~$ pwd /Users/takuya takuya@~$ export foo=baaaa takuya@~$ echo $foo baaaa ## この状態で direnv による上書きをしてみる。 takuya@~$ cd /tmp/tmp direnv: loading .envrc direnv: export ~foo takuya@tmp$ echo $foo bar takuya@tmp$ cd - /Users/takuya direnv: unloading ### 元通り!!! takuya@~$ echo $foo baaaa takuya@~$
わりと安心して使えるし細かいことを考えなくて良くなるので便利だと思う。
残念な点
alias とか function は読み込んでくれないんだよなぁ。