我的简单脚本是这样的:
#!/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
没关系。
那么,我错过了什么?
答案 0 :(得分:6)
来自Manpage:
即可。 filename [参数]
源文件名[参数] 读取和执行 来自当前shell环境中的filename的命令并返回 从filename执行的最后一个命令的退出状态。 如果是文件名 不包含斜杠,PATH中的文件名用于查找 包含文件名的目录。在PATH中搜索的文件不需要 可执行的。 当bash未处于posix模式时,当前目录 如果在PATH中找不到文件,则搜索。如果源路径选项为 shopt builtin命令关闭,不搜索PATH。如果 提供任何参数,它们成为时的位置参数 文件名已执行。否则位置参数是 不变。返回状态是退出的最后一个命令的状态 在脚本中(如果没有执行任何命令,则为0),如果是,则为false 找不到或无法读取文件名。
所以,似乎shebang #!/bin/sh
将你的bash设置为posix模式。在此模式下,仅评估PATH
,而不是当前目录。