我有一个奇怪的问题,我不能执行 bash 脚本,即使是基本的:
#!/bin/bash
echo "me"
我将它保存为 test.sh 然后执行 chmod 755 test.sh 并运行 ./test.sh 得到:
bash: ./test.sh: Permission denied
有什么想法可能导致这种情况吗?
我有一个奇怪的问题,我不能执行 bash 脚本,即使是基本的:
#!/bin/bash
echo "me"
我将它保存为 test.sh 然后执行 chmod 755 test.sh 并运行 ./test.sh 得到:
bash: ./test.sh: Permission denied
有什么想法可能导致这种情况吗?
如果您使用“noexec”选项安装了文件系统,就会发生这种情况。你应该删除它。
脚本需要是可执行的。用这个:
chmod +x <script-name>
尝试
ls -la
查看文件的实际权利和所有权。看看 chmod 命令是否真的有效。您可能希望更改所有权以及文件检查的模式:http ://www.tuxfiles.org/linuxhelp/fileowner.html
尽管与此特定线程没有直接关系;如果文件来自 Windows 系统,则行尾可能有 CR/LF。这将影响文件中的所有行,包括初始执行行,并且在您查看文件时将不可见。
$ ./test.sh
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory
要看到这个,你可以 cat -A 文件: $ cat -A ./test.sh #!/bin/bash^M$ echo "me"^M$
要删除,请使用 dos2unix。
使用 chmod +x ./test.sh
它应该允许您运行它。
此外,检查包含脚本的目录/文件系统是否已安装在 nfs 上。root 不会从安装了 nfs 的位置运行脚本。
在 macOS 中,如果存在 com.apple.quarantine 标志,则可能会发生这种情况。如果ls -l
在脚本路径上运行a后看到权限上有@后缀,执行ls -l@ *script_path*
确认。然后运行 axattred -d com.apple.quarantine *script_path*
以删除隔离标志。
当您在该文件的目录中时需要使用./test.sh
,如果没有,请尝试PATH TO THE SCRIPT
。或者您可以将其复制到某个目录/data
并将其 chmod 用于 shell,然后执行上述步骤。如果您仍然失败,没关系,因为我有同样的问题,我只是成功了一次。
对于noexec
默认挂载的文件系统,例如 NFS,exec
在末尾显式添加会有所帮助,即使列表中前面提供的选项noexec
也默认暗示,例如user
选项。
因此,如果您有以下选项之一:
noexec
user
将它们更改为:
exec
或者user,exec
放在最后很重要exec
。在某些情况下,仅删除noexec
可能会有所帮助,但如果您像user
以前一样使用其他选项,则并非完全如此。