direnvでプロンプトのPS1をちゃんと設定する

pythonのvenvを自動でactivateしたかったので、gitbash上でdirenvを設定しようとしたら、

direnv: PS1 cannot be exported. For more information see https://github.com/direnv/direnv/wiki/PS1

というエラーが出ました。

wikiの対処法だけでは不足だったので、メモしておきます。

.envrcに

source .venv/bin/activate
if [ -z "${VENV_BASE:-}" ] && [ -n "${VIRTUAL_ENV:-}" ]; then
    VENV_BASE=$(basename "${VIRTUAL_ENV}")
fi
export VENV_BASE
unset PS1

を設定。

.bashrcに

eval "$(direnv hook bash)"
PS1='${VENV_BASE:+($VENV_BASE)}'$PS1

を追記です。

unset PS1はWikiのままですが、bashrcでプロンプトのPS1を設定するのに少し戸惑いました。

PS1="${VENV_BASE:+($VENV_BASE)}"$PS1 -> 「"」だと設定時に変数展開してしまうのでNG
PS1='${VENV_BASE:+($VENV_BASE)}'$PS1 -> OK
PS1="\${VENV_BASE:+($VENV_BASE)}"$PS1 -> $をエスケープすれば良いので、これでもOK



以上です。

コメント

タイトルとURLをコピーしました