Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

XonshAdvent Calendar 2018

Day 8

xonshでdirenvを使う

Last updated at Posted at 2018-12-07

2019/02/09追記
xontribが本家のリストに追加されました。xontrib listで表示されます。
https://xon.sh/xontribs.html#direnv

2019/01/09追記
xontrib にしました → https://github.com/74th/xonsh-direnv/

注意: xonsh/0.8.1 の時点での動作を確認した

direnv という .envrc というファイルに export を書いておくと、そのディレクトリでのみ環境変数を有効にしてくれる便利なツールがある。

bashでは、eval "$(direnv hook bash)"を.bashrcに書いておくことで有効になるが、xonshでは使うことができない。

これをxonshで有効にするには以下のよう.xonshrcにセットする。

import jaon
@events.on_chdir
def direnv(olddir, newdir, **kw):
    r = !(direnv export json)
    r.end()
    if len(r.output) > 0:
        lines = json.loads(r.output)
        for k,v in lines.items():
            if v is None:
                del(__xonsh__.env[k])
            else:
                __xonsh__.env[k] = v

direnvのbashでの動作は、プロンプトにdirenv export jsonのコマンドを仕込み、ディレクトリを移動するタイミングで、export及びunsetで目的の環境変数の設定を行う。

これをxonshのディレクトリ移動のイベント(@events.on_chdir)で実行し、exportとunsetを環境変数の辞書である__xonsh__.envに対して実行すれば良い。

なお、!(command)はCommandPipeline型が返り、end()をよぶとコマンドの終了まで待ち、outputerrorsに標準出力、エラー出力が入る。$(command)だと標準エラーが出力されないので、こちらを使っている。

この手の挙動もPythonで楽々組めるxonshは便利です。

3
5
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

Comments

No comments

Let's comment your feelings that are more than good

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?