4 个版本 (破坏性更新)
使用旧的 Rust 2015
0.5.0 | 2019年1月19日 |
---|---|
0.4.0 | 2019年1月3日 |
0.3.0 | 2018年7月17日 |
0.2.0 | 2018年6月21日 |
#23 in #auto
16KB
374 行
envrc - 自动加载您工作区的 bash .envrc
为什么?
首先,direnv 目前不支持别名。
其次,
direnv 实际上创建了一个新的 bash 进程来加载 stdlib、direnvrc 和 .envrc,并仅将环境差异导回原始 shell。
然而,envrc 更简单。它启动一个新的交互式 bash 并加载 .envrc
。当您 cd
出目录时,shell 退出并将终端返回到原始 shell。
安装
cargo安装 envrc
- 将
.envrc
添加到 bashrc 的末尾
用法
$ mkdir foo
$
$ echo 'echo in foo directory' > foo/.envrc
$
$ cd foo
envrc: spawning new /bin/bash
envrc: loading [/home/roxma/test/envrc/foo/.envrc]
in foo directory
$
$ cd ..
envrc: exit [/home/roxma/test/envrc/foo/.envrc]
$ envrc
envrc 0.2
Rox Ma roxma@qq.com
auto source .envrc of your workspace
USAGE:
envrc [SUBCOMMAND]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
SUBCOMMANDS:
allow Grant permission to envrc to load the .envrc
bash for bashrc: PROMPT_COMMAND='eval "$(envrc bash)"'
deny Remove the permission
help Prints this message or the help of the given subcommand(s)
prune Remove expired or non-existing-file permissions
注意:在退出 .envrc
之前,请注意您的后台任务。
.envrc 小贴士
export WORKSPACE_DIR=$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")
用于.envrc
以定位其目录。exec bash
重新加载修改后的.envrc
.bashrc 配置
# If the `.envrc` is allowed, but not sourced for 1d since last unload, It
# will be considered expired
export ENVRC_ALLOW_DURATION=$((60*60*24))
PROMPT_COMMAND='eval "$(envrc bash)"'
为什么不选择 bash/python?
第一个工作提交是用 python 编写的。但在我电脑上的 python 版本有明显的延迟。用 perl 重新编写也没有帮助。然后我决定切换到 rust。
$ time envrc.py bash-prompt-command >/dev/null
real 0m0.079s
user 0m0.044s
sys 0m0.004s
我还尝试了纯bash实现。它的性能比python实现更好,因为python的大部分开销在于启动时间。bash的大部分开销是子进程的fork/exec,它的速度远低于rust实现。更多信息请参阅#1。
依赖项
约750KB