例如,如果我有example.sh
以下内容
. non-existing.sh
echo 'continues!'
Run Code Online (Sandbox Code Playgroud)
然后我在交互式会话中获取脚本. ./example.sh
,如果我看到“继续!” 在终端?该标准的指定
如果没有找到可读文件,非交互式 shell 将中止;交互式 shell 应将诊断消息写入标准错误,但这种情况不应被视为语法错误。
我知道如果. non-existing.sh
会话应该继续,但我不确定它如何应用于嵌套源。在 Bash 中,它在打印错误消息后继续运行(即使使用set -o posix
);在 Dash 中,它中止当前脚本 ( example.sh
)。我想知道这是 Bash 不符合 POSIX,还是 POSIX 中未指定的(实现定义的行为)?
POSIX 对嵌套源文件保持沉默,但我怀疑,如果提出解释请求,则现有文本dot
将适用。
\n\n姓名
\n
\n点 - 在当前环境中执行命令
概要
\n
\n
. file
描述
\n
\nshell 应在当前环境中执行文件中的命令。
\n如果文件不包含 <slash>,则 shell 将使用PATH指定的搜索路径来查找包含文件的目录。\xe2\x80\x83 然而,与普通命令搜索不同,点实用程序搜索的 \xc2\ xa0文件不需要是可执行文件。\xe2\x80\x83如果没有找到可读文件,非交互式 shell 将中止;交互式 shell 应将诊断消息写入标准错误,但这种情况不应被视为语法错误。
至于dash
或bash
,对任何一个 shell 都没有要求,除非它们声称完全符合 IEEE Std 1003.1-2017。
有趣的是,Debian Stretch 上的当前dash(1)
联机帮助页包含以下文本:
\n\ndash是系统的标准命令解释器。\xc2\xa0\ndash 的当前版本正在更改\n以\n为\xc2\xa0 符合 shell 的 POSIX 1003.2 和 1003.2a 规范。\xc2\xa0 \ n...\xe2\x80\x82仅由 POSIX 指定的功能以及一些 Berkeley 扩展\n 被合并到此 shell 中。
\n
这个联机帮助页所说的全部内容.
是:
\n\n
. file
\n
\nshell 读取并执行指定文件中的命令。
如您所见,dash
不声称符合 IEEE Std 1003.1-2017。尽管如此,我假设dash
从标准的角度来看,这种行为可能是“错误的”,因为它中止了当前的脚本而不是继续。
归档时间: |
|
查看次数: |
97 次 |
最近记录: |