繁体   English   中英

".filename" 从 /bin/sh 运行时找不到文件,从 /bin/bash 运行; 为什么?

[英]". filename" can't find file when run from /bin/sh, works from /bin/bash; why?

我的简单脚本是这样的:

#!/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

没关系。

那么,我错过了什么?

手册页

. 文件名 [参数]

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

因此,shebang #!/bin/sh似乎将您的 bash 设置为 posix 模式。 在这种模式下,只评估PATH ,而不是当前目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM