sh源找不到文件

hat*_*hat 4 sh dash-shell

我安装的是 Ubuntu 20.04。我似乎无法使用 来获取文件sh,这是 Ubuntu 的默认设置dash

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

构建环境:

SOMEVAR=something
A_VAR=some_value
Run Code Online (Sandbox Code Playgroud)

. build.env我可以使用或在 bash 上获取它source build.env。但是,如果我尝试. build.env使用 sh,我会得到

sh: 1: .: build.env: not found. 
Run Code Online (Sandbox Code Playgroud)

我可以statcat该文件,但我无法获取它的来源。为什么?

Kam*_*ski 6

.(dot) 命令是POSIX所必需的,它应该在sh. 你得到的错误

.: build.env: not found.
Run Code Online (Sandbox Code Playgroud)

确实来自.. 就是build.env那个没找到。

这是因为您sh遵循规范:

如果file不包含 <slash>,shell 将使用 指定的搜索路径来查找包含filePATH的目录。

在您的情况下build.env,您的PATH. 你需要

. ./build.env
Run Code Online (Sandbox Code Playgroud)

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