.
我尝试检查(或等效的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
.
/