我用虚拟环境包装器管理我的 Python 环境。我的全局postactivate
文件(激活虚拟环境后获取的 Bash 脚本)包含以下内容:
if [ -f 'activate.sh' ]; then
echo 'activate virtualenv settings'
source 'activate.sh'
fi
activate.sh
仅当连接到虚拟环境的项目包含此类文件时,才应获取该文件。但是,如果我workon
在包含此类文件的项目上使用该命令,则会收到以下输出和错误:
activate virtualenv settings
/home/…/.virtualenvs/postactivate: Zeile 15: source: activate.sh: Datei nicht gefunden.
因此,测试似乎找到了该activate.sh
文件,但第 15 行抛出了一个错误(即该行source activate.sh
,错误转换为文件未找到)。为什么?
答案1
当处于 POSIX 一致性模式时(例如当调用 assh
或当POSIXLY_CORRECT
is 在环境中时),当 的参数source
不包含任何斜杠字符时,会像 POSIX require实用程序( s的标准等效项)那样bash
查找它,而不是当前目录。$PATH
.
bash
source
如果它是一个sh
脚本,你应该:
- 使用
.
, not ,这不是source
sh
/标准。 - 如果您打算在当前目录中
. ./file
获取,请使用,而不是在查找中获取第一个找到的内容。file
. file
file
$PATH