Переместите 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 (и, возможно, некоторые плагины) для этого.

Другие вопросы по тегам