我的目录中有2个文件; sh.sh和conf.conf。他们看起来像这样。
# conf.conf
HELLO=hello
# sh.sh
. conf.conf
echo $HELLO
在终端窗口中,我可以使用以下命令获取conf.conf
. conf.conf
,命令成功执行,我可以echo $HELLO
到屏幕了。但是,当我运行脚本时,相同的命令不起作用。我收到以下错误
sh.sh: 1: .: conf.conf: not found
如果我将脚本的解释器更改为bash,则可以正常工作。如果我将脚本中的命令更改为. ./conf.conf
,它也可以使用。为什么会这样?
答案 0 :(得分:3)
内置.
shell的POSIX规范是从$PATH
中的路径搜索文件,类似于搜索可执行文件的方式。这是一个Bash扩展名,如果在$PATH
中找不到该文件,它也会在当前目录中搜索该文件。
因此. ./conf.conf
是POSIX兼容的方法,您可以同时观察Bash和sh
的行为。但是. conf.conf
是特定于Bash的(sh
仅搜索$PATH
),因此只能通过Bash获得结果。