Невозможно отменить PS1 с помощью direnv
Я слежу за вики Direnv на PS1. В моих файлах есть следующие соответствующие записи.
.bashrc
DEFAULT_PS1='\[$(ppwd)\]\u@\h:\w$(__git_ps1 " (%s)")'
# add some more things to DEFAULT_PS1, conditionally
DEFAULT_PS1+='> '
PS1=${CUSTOM_PS1:-$DEFAULT_PS1}
# optional bashrc file extensions
for f in ~/.bashrc_*; do test -s $f && . $f || true; done
eval "$(direnv hook bash)"
.envrc
export KUBECONFIG=~/.config/kube/homelab.yaml
export KUBE_PS1_ENABLED=on
export CUSTOM_PS1='$(kube_ps1) $ '
PATH_add scripts
Я разрешил последнюю версию .envrc
с direnv allow
. Однако при переходе в каталог пользовательское значение PS1 не устанавливается, хотя значения кажутся правильными
$ cd -
/home/robert/sources/oss/sling-cloud-native
direnv: loading .envrc
direnv: export +CUSTOM_PS1 +KUBE_PS1_ENABLED ~KUBECONFIG ~PATH
$ echo $PS1
\[$(ppwd)\]\u@\h:\w$(__git_ps1 " (%s)")$(kube_ps1)>
$ echo $CUSTOM_PS1
$(kube_ps1) $
Я не уверен, как должно работать решение в вики, поскольку, по-видимому, значение PS1 установлено на DEFAULT_PS1, когда .bashrc
файл загружается в первый раз и не переоценивается как часть direnv
крючок.
Как я могу изменить значение PS1 с помощью direnv
?
1 ответ
В вики direnv упоминается, что автору пришлось «занести PS1 в черный список как переменную среды, которую можно изменить», главным образом потому, что «основная проблема заключается в том, что PS1 является локальной переменной». Поэтому я не думаю, что обходные пути, связанные с использованием файла для косвенного изменения, могут работать.
У меня была аналогичная проблема с виртуальными средами Python, которая, как я понимаю, отличается от вашего варианта использования, но в этом блоге есть пример , который может быть полезен.
Поскольку ссылки могут умереть, я привожу это здесь:
- добавьте следующее в ~/.bashrc (я: я тестировал это с помощью ~/.zshrc, и это также работает)
show_virtual_env() {
if [[ -n "$VIRTUAL_ENV" && -n "$DIRENV_DIR" ]]; then
echo "($(basename $VIRTUAL_ENV))"
fi
}
export -f show_virtual_env
PS1='$(show_virtual_env)'$PS1
- Затем снова создайте файл
source ~/.bashrc
В вики также упоминается добавление
unset PS1
в файл, который удаляет любую ошибку о
direnv: PS1 cannot be exported...
и я могу подтвердить, что это также работает с этим сценарием.
Возможно, вы можете сделать что-то подобное; использовать
.envrc
чтобы экспортировать переменные среды, как вы делаете, но удалите строку
export CUSTOM_PS1='$(kube_ps1) $ '
и в вашем
~/.bashrc
сделать функцию, которая проверяет, установили ли вы
KUBE_PS1_ENABLED
и добавляет
'$(kube_ps1) $ '
к
PS1
если он установлен.