【发布时间】:2019-09-09 16:47:27
【问题描述】:
我使用 pyenv 来管理我的 Python 环境,并且在简单地运行 bash 时得到以下结果。
$ bash
pyenv: bash: command not found
我试图解决为什么pipenv shell 因上述错误而失败,这就是我发现bash 无法正常工作的原因。我尝试通过brew 更新pipenv 并运行pyenv rehash 以重新生成垫片。 bash 肯定存在。
$ which bash
/bin/bash
我预计如果pyenv没有找到命令,会搜索PATH环境变量指定的后续路径。有趣的是,如果我执行一些不存在的命令,我不会收到 pyenv 错误。
$ someboguscommand
-bash: someboguscommand: command not found
这向我表明pyenv 在这种情况下甚至不会搜索匹配的命令,而是搜索PATH 中的后续路径,因此必须对bash 进行一些特殊处理。
【问题讨论】:
-
type bash说什么? -
这表明问题出在您的 init 文件中的命令上,例如
.bashrc或.bash_profile。您可以运行bash -x来显示正在发生的事情的调试跟踪,以及它开始失败的位置。尽管出现错误,但单独运行bash可能仍然有效,并且仅在您的.bashrc或.bash_profile中显示有关失败的pyenv命令的警告,否则会为您提供工作 shell。 -
更好,我建议
PS4=':$BASHPID:${BASH_SOURCE##*/}:$LINENO+' bash -x在跟踪日志中记录每个命令的进程 ID、源文件和行号。将这些日志中的BASHPID与您的起始 shell 中的进行比较,您就可以确定错误是在进程内还是进程外。 -
顺便说一句,冒着从建议转向倡导的风险,就个人而言,我更乐意使用Nix 来管理开发环境——它不仅可以让你控制哪些 Python 模块在——每个 shell 或项目的范围,以及其他可执行文件和库的版本;这意味着您可以在一个环境中使用 bash 5,在另一个环境中使用 bash 3.2;或者针对一个版本的 zlib 或 sqlite 构建的 Python,以及另一个版本的不同版本;等——同样,它支持管理 Ruby/Node/Haskell/等。编译器/解释器/库。
-
我会先查看我的 .profile、.bashrc 和类似文件。 pyenv 的初始化代码在他们的文件中,并且似乎被破坏了。也许删除它并再次设置 pyenv?