2

我怎样才能把eval "$(pyenv init -)".zshrc移到.xonshrc?这样做的语法是xonsh什么?

4

2 回答 2

1

pyenv init -生成一些可以获取的 bash 代码。xonsh 有办法获取 bash 代码:source-bash. 不幸的是,source-bash只接受一个文件作为参数;它不消耗标准输入。不过,解决方案相当简单:

pyenv init - > /tmp/pyenv
source-bash /tmp/pyenv > /dev/null
于 2018-04-21T20:16:01.967 回答
1

pyenv(目前)仅支持符合 POSIX 的 shell(如bashor zsh)以及fishshell。pyenv不仅仅是一个包装器python,它还集成到正在运行的 shell 会话中,以便透明地提供所需的 virtualenv。

eval "$(pyenv init -)"

获取输出pyenv init -并在运行 shell 的上下文中运行(评估)它,就好像输出是写在那里而不是eval命令一样。

看看pyenv init -你可以看到的输出,它是一些 shell 代码,它 - 除其他外 - 定义了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
}

如果在fishshell 中运行,pyenv init -则返回执行相同操作但使用fish's 语法的代码。

-

pyenv使用xonsh它必须输出xonsh兼容的变量和函数定义。据我所知,您至少必须为此编辑文件libexec/pyenv-initlibexec/pyenv-sh-shell(可能还有一些插件)。

于 2017-05-31T07:31:48.287 回答