sh 源找不到文件

sh 源找不到文件

我安装了 Ubuntu 20.04。我似乎无法使用sh(Ubuntu 的默认 )来获取文件dash

我有一个文件,build.env其中包含一些环境变量,如下所示:

构建.环境:

SOMEVAR=something
A_VAR=some_value

我可以使用. build.env或来在 bash 上执行此操作source build.env。但是,如果我尝试. build.env使用 sh,我会得到

sh: 1: .: build.env: not found. 

我可以statorcat该文件,但无法获取它。为什么?

答案1

.(点)命令是POSIX 要求,它应该可以在任何实现中工作sh。你得到的错误

.: build.env: not found.

确实来自.。 找不到build.env

这是因为您sh遵循了规范:

如果文件不包含 <slash>,则 shell 将使用指定的搜索路径来PATH查找包含的目录文件

在你的情况下build.env, 不存在于你指定的目录中PATH。你需要

. ./build.env

build.env到位于当前工作目录中的源。

笔记:

  • .Bash 中的 (builtin) 表现得就像PATH包含.在末尾的 (当前工作目录)。这意味着. build.env在 Bash 中确实可以工作。这可能是您期望它在 中工作的原因sh
  • POSIX 没有指定source
  • cat build.env(或stat build.env等)与 不同,. build.env因为cat不用于PATH定位build.env。因为它build.env意味着./build.env

相关内容