如果不显式调用 sh,则无法执行 .sh 文件

如果不显式调用 sh,则无法执行 .sh 文件

假设我有一个名为的文件,run.sh其中包含:

#! /bin/sh -x

x-www-browser index.html

ls -l run.sh说:

-rwxr-xr-x 1 myusername myusername 39 Jan  9 19:32 run.sh

./run.sh说:

bash: ./run.sh: Permission denied

为什么它不起作用?为什么可以sh -x run.sh完美运行?


更多信息,因为这显然并不那么容易

如果我执行 a sudo,它不会输出错误,但也不会执行任何操作。

myusername@crunchbang:/mnt/data$ sudo ./run.sh
[sudo] password for myusername: 
myusername@crunchbang:/mnt/data$ 

答案1

文件系统run.sh已打开并已安装noexec

答案2

我的猜测是该#!行上有一些奇怪的字符,可能是 ASCIINul或其他非打印字符,也可能是退格键之类的东西。某些 shell 在 MS-DOS/Windows 两字节(回车换行)行尾标记方面存在问题。现代编辑器可以检查文件并确定它们是 Unix 样式(换行)行尾还是 Windows 样式(甚至可能是 Mac 样式)文本文件。也许您的编辑器搞混了,写出了一个 Windows 文本文件。

这导致内核找不到所指定的任何“可执行文件”,并且它声称无法执行不存在的“可执行文件”。

相关内容