Bash:“test”找到文件,但“source”找不到

Bash:“test”找到文件,但“source”找不到

我用虚拟环境包装器管理我的 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_CORRECTis 在环境中时),当 的参数source不包含任何斜杠字符时,会像 POSIX require实用程序( s的标准等效项)那样bash查找它,而不是当前目录。$PATH.bashsource

如果它是一个sh脚本,你应该:

  1. 使用., not ,source这不是sh/标准。
  2. 如果您打算在当前目录中. ./file获取,请使用,而不是在查找中获取第一个找到的内容。file. filefile$PATH

相关内容