使用 ./script.sh 执行脚本失败,而“sh script.sh”可以执行

使用 ./script.sh 执行脚本失败,而“sh script.sh”可以执行

我对这个错误感到非常困惑,甚至不知道该用 Google 搜索什么:

失败- 执行脚本:

./test.sh 
bash: ./test.sh: "Permission denied" 

作品- 虽然这些方法有效:

sh ./test.sh
Works
bash ./test.sh
Works

测试脚本:

cat test.sh 
#!/bin/bash

echo "Works"

拥有所有执行权限:

chmod 777 test.sh

ls -als test.sh 
4 -rwxrwxrwx 1 edo edo 27 13. Feb 10:41 test.sh

我完全不明白为什么会发生这种情况,因为这对我来说没有任何意义,而且我不知道该用 Google 搜索什么词才能正确描述这种行为。

答案1

依靠 shebang 行执行脚本与将其作为参数传递给 shell 有很大不同。

在前一种情况下,文件必须位于可执行分区上,并且必须包含现有 shell 的有效 shebang 行。

在后一种情况下,这些都不是必需的,因为调用脚本的 shell 会负责这些事情。

请注意,您在这些测试中也没有使用相同的 shell:第一个推断 bash,而第二个使用 sh。

我的猜测是,你的脚本所在的分区不允许执行;mount -v如果是这种情况,它会告诉你。

相关内容