假设我有一个名为的文件,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 文本文件。
这导致内核找不到所指定的任何“可执行文件”,并且它声称无法执行不存在的“可执行文件”。