Переместите eval $(pyenv init -) из zsh в xonsh
Как я могу двигаться eval "$(pyenv init -)"
это в .zshrc
в .xonshrc
? Какой синтаксис в xonsh
сделать это?
2 ответа
pyenv init -
генерирует немного кода bash, который можно получить. У xonsh есть способ получить исходный код bash: source-bash
, К несчастью, source-bash
принимает только файл в качестве аргумента; он не потребляет STDIN. Решение довольно простое, хотя:
pyenv init - > /tmp/pyenv
source-bash /tmp/pyenv > /dev/null
pyenv
(на данный момент) поддерживает только POSIX-совместимые оболочки (например, bash
или же zsh
) так же хорошо как fish
ракушка. pyenv
это не просто обертка вокруг python
он интегрируется в запущенный сеанс оболочки, чтобы прозрачно обеспечить желаемое virtualenv.
eval "$(pyenv init -)"
принимает вывод pyenv init -
и запускает (оценивает) его в контексте запущенной оболочки, как если бы вывод был записан вместо eval
команда.
Посмотрев на вывод pyenv init -
Вы можете видеть, что это немного шелл-кода, который, среди прочего, определяет pyenv
функция.
export PATH="/home/adaephon/local/opt/pyenv/shims:${PATH}"
export PYENV_SHELL=zsh
source '/home/adaephon/local/opt/pyenv/libexec/../completions/pyenv.zsh'
command pyenv rehash 2>/dev/null
pyenv() {
local command
command="$1"
if [ "$#" -gt 0 ]; then
shift
fi
case "$command" in
activate|deactivate|rehash|shell)
eval "$(pyenv "sh-$command" "$@")";;
*)
command pyenv "$command" "$@";;
esac
}
Если запустить в fish
ракушка, pyenv init -
возвращает код, который делает то же самое, но в fish
синтаксис.
-
За pyenv
работать с xonsh
это должно было бы вывести xonsh
совместимые определения переменных и функций. Насколько я вижу, вам придется хотя бы отредактировать файлы libexec/pyenv-init
а также libexec/pyenv-sh-shell
(и, возможно, некоторые плагины) для этого.