&#34 ;.文件名"从/ bin / sh运行时无法找到文件,从/ bin / bash开始工作;为什么?

时间:2015-09-25 08:42:31

标签: linux bash shell sh

我的简单脚本是这样的:

#!/bin/sh


DEF=.file_name_with_a_leading_dot.sh

. ${DEF}

注意顶行的/ bin / sh。 当我运行这个简单的脚本时,我收到一个错误,即文件未找到。 但是,如果我将该顶行更改为#!/ bin / bash,那么脚本会在当前目录中找到该文件。

但是,在我的Ubuntu linux笔记本电脑上,我看到/ bin / sh是/ bin / bash的符号链接。那么,为什么我的脚本表现不同?

另外,我可以像这样运行脚本:

/bin/bash ./script.sh

没关系。

那么,我错过了什么?

1 个答案:

答案 0 :(得分:6)

来自Manpage

  

即可。 filename [参数]

     

源文件名[参数] 读取和执行   来自当前shell环境中的filename的命令并返回   从filename执行的最后一个命令的退出状态。 如果是文件名   不包含斜杠,PATH中的文件名用于查找   包含文件名的目录。在PATH中搜索的文件不需要   可执行的。 当bash未处于posix模式时,当前目录   如果在PATH中找不到文件,则搜索。如果源路径选项为   shopt builtin命令关闭,不搜索PATH。如果   提供任何参数,它们成为时的位置参数   文件名已执行。否则位置参数是   不变。返回状态是退出的最后一个命令的状态   在脚本中(如果没有执行任何命令,则为0),如果是,则为false   找不到或无法读取文件名。

所以,似乎shebang #!/bin/sh将你的bash设置为posix模式。在此模式下,仅评估PATH,而不是当前目录。