Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux &引用;。“文件名”;can';从/bin/sh运行时找不到文件,从/bin/bash工作;为什么?_Linux_Bash_Shell_Sh - Fatal编程技术网

Linux &引用;。“文件名”;can';从/bin/sh运行时找不到文件,从/bin/bash工作;为什么?

Linux &引用;。“文件名”;can';从/bin/sh运行时找不到文件,从/bin/bash工作;为什么?,linux,bash,shell,sh,Linux,Bash,Shell,Sh,我的简单脚本如下所示: #!/bin/sh DEF=.file_name_with_a_leading_dot.sh . ${DEF} /bin/bash ./script.sh 请注意顶行上的/bin/sh。 当我运行这个简单的脚本时,我得到一个错误,文件找不到。 但是,如果我把顶行改成#/bin/bash然后脚本会在当前目录中找到该文件 但是,在我的Ubuntu linux笔记本电脑上,我看到/bin/sh是指向/bin/bash的符号链接。那么,为什么我的脚本表现不同呢 此外,我

我的简单脚本如下所示:

#!/bin/sh


DEF=.file_name_with_a_leading_dot.sh

. ${DEF}
/bin/bash ./script.sh
请注意顶行上的/bin/sh。 当我运行这个简单的脚本时,我得到一个错误,文件找不到。 但是,如果我把顶行改成#/bin/bash然后脚本会在当前目录中找到该文件

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

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

#!/bin/sh


DEF=.file_name_with_a_leading_dot.sh

. ${DEF}
/bin/bash ./script.sh
没关系

那么,我遗漏了什么呢?

来自:

。文件名[参数]

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


所以,似乎shebang
#/bin/sh
将bash设置为posix模式。在此模式下,仅计算路径,而不是当前目录。

您可以在此处查看:。基本上,
bash
sh
是不同的东西,bash在被称为
/bin/sh
时以兼容模式启动,但为什么这意味着它找不到文件?我可以复制这个.sh模式,它的工作方式似乎有所不同。/.file有效…..请记住,在编写问题标题时,StackOverflow的目标是建立一个知识库--我们可能有数百个关于bash和POSIX sh之间兼容性差异的问题,因此,要使一个问题成为人们在知识库中搜索时能够真正找到和区分的问题,它需要有一个标题来反映它所问的具体差异。我已尝试相应地进行编辑。这意味着:使用
/“$DEF”
使其在POSIX模式下工作。