我安装了 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.
我可以stat
orcat
该文件,但无法获取它。为什么?
答案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
。