设置 POSIX 模式时 bash 中的点 (.) 或源行为 (OS X)

设置 POSIX 模式时 bash 中的点 (.) 或源行为 (OS X)

.我尝试检查(或等效的source)内置函数的行为差异。我在 El Capitan 上使用 bash 3.2。根据文档设置 POSIX 模式 ( set -o posix) 应避免 shell 在.发出不包含 .txt 的文件名时在当前目录中搜索/

我位于 myscript.sh (回显“Hello”)所在的 tmp 目录中:

MacBook:tmp simone$ set | grep SHELLOPTS
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
MacBook:tmp simone$ . myscript.sh 
Hello
MacBook:tmp simone$ set -o posix
MacBook:tmp simone$ set | grep SHELLOPTS
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:posix
MacBook:tmp simone$ . myscript.sh 
Hello

看起来当前目录中的脚本的执行与 POSIX 设置无关。我是否误解了什么或者有更微妙的解释吗?


正如评论中所指出的,如果.不在 PATH 中,则行为应该如所描述的那样。我的 PATH 变量包含以下字符串:

/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

答案1

这是一个错误,在后续版本中已修复。来自bash 变更日志

本文档详细介绍了此版本 bash-4.0-alpha 与之前版本 bash-3.2-release 之间的更改。 (……)

1. Bash 的更改 (...)

gggg。修复了一个错误,该错误导致在 Posix 模式下运行的 shell在 中找不到$PWD指定为source/参数的文件时搜索该文件。 (……).$PATH

三.修复了导致 shell 搜索/$PATH参数 的错误,即使它包含.source./

相关内容