使用 direnv 在切换目录时添加 hook
前言
direnv – unclutter your .profile | direnv
是一个可以在切换目录时,自动执行 hook 的工具,可以用来自动加载环境变量,或者执行一些命令。
安装方式
brew install direnv
配置 shell
eval "$(direnv hook bash)"
配置文件
DIRENV.TOML 1 “2019” direnv “User Manuals” | direnv
~/.config/direnv/direnv.toml
使用示例
切换目录,会加载当前目录下的
.envrc
文件, 同时也会加载~/.config/direnv/direnvrc
文件
比如我们有个 repo, 希望进入的时候,加载 .env, 并且切换 node
版本, 可以这样配置 .envrc
:
set -e
use node
内置的指令
DIRENV-STDLIB 1 “2019” direnv “User Manuals” | direnv
.nvmrc
中,可以太慢内置指令,直接触发一些加载:
dotenv_if_exists
: 加载.env
文件direnv status
: 查看当前环境相关信息
结合 poetry
在全局配置文件中,定义自定义的 layout_poetry
, 然后项目 .nvmrc
中使用 layout poetry
即可。
layout_poetry() {
PYPROJECT_TOML="${PYPROJECT_TOML:-pyproject.toml}"
if [[ ! -f "$PYPROJECT_TOML" ]]; then
log_status "No pyproject.toml found. Executing \`poetry init\` to create a \`$PYPROJECT_TOML\` first."
poetry init
fi
if [[ -d ".venv" ]]; then
VIRTUAL_ENV="$(pwd)/.venv"
else
VIRTUAL_ENV=$(poetry env info --path 2>/dev/null ; true)
fi
if [[ -z $VIRTUAL_ENV || ! -d $VIRTUAL_ENV ]]; then
log_status "No virtual environment exists. Executing \`poetry install\` to create one."
poetry install
VIRTUAL_ENV=$(poetry env info --path)
fi
PATH_add "$VIRTUAL_ENV/bin"
export POETRY_ACTIVE=1
export VIRTUAL_ENV
}
没有提供 exit 目录的 hook
没找对这种方案。网上大多都是添加 zsh-hook
: