我使用 pyenv
来管理我的 Python 环境,当简单运行 bash
时,我会得到以下提示:
$ bash
pyenv: bash: command not found
我试图排除为什么pipenv shell
失败并出现上述错误,结果发现即使bash
也无法工作。我尝试通过brew
更新pipenv
并运行pyenv rehash
重新生成shims。而bash
绝对存在。
$ which bash
/bin/bash
我原本以为如果pyenv
找不到一个命令,那么就会搜索PATH
环境变量指定的后续路径。有趣的是,如果我执行一些不存在的命令,我并没有收到pyenv
错误。
$ someboguscommand
-bash: someboguscommand: command not found
这让我认为,在这种情况下,
pyenv
甚至不搜索匹配的命令,而是搜索PATH
中的后续路径,因此必须对bash
进行一些特殊处理。
type bash
会输出什么? - that other guy$ type bash
bash is hashed (/bin/bash)
- Greg.bashrc
或.bash_profile
。您可以运行bash -x
来显示正在发生什么以及它从哪里开始失败的调试跟踪。单独运行bash
可能会在错误的情况下工作,并且只会在您的.bashrc
或.bash_profile
中显示有关失败的pyenv
命令的警告,同时为您提供一个工作的 shell。 - that other guyPS4=':$BASHPID:${BASH_SOURCE##*/}:$LINENO+' bash -x
,以记录每个跟踪日志中的进程ID、源文件和行号。将这些日志中的BASHPID
与起始shell中的BASHPID
进行比较,您就可以得出错误是在进程内还是进程外的确定答案。 - Charles Duffy