19

我有一个奇怪的问题,我不能执行 bash 脚本,即使是基本的:

#!/bin/bash
echo "me"

我将它保存为 test.sh 然后执行 chmod 755 test.sh 并运行 ./test.sh 得到:

bash: ./test.sh: Permission denied

有什么想法可能导致这种情况吗?

4

9 回答 9

23

如果您使用“noexec”选项安装了文件系统,就会发生这种情况。你应该删除它。

于 2011-11-11T14:21:25.377 回答
18

脚本需要是可执行的。用这个:

chmod +x <script-name>
于 2017-04-20T21:30:48.203 回答
1

尝试

ls -la

查看文件的实际权利和所有权。看看 chmod 命令是否真的有效。您可能希望更改所有权以及文件检查的模式:http ://www.tuxfiles.org/linuxhelp/fileowner.html

于 2011-11-11T14:25:26.290 回答
1

尽管与此特定线程没有直接关系;如果文件来自 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。

于 2012-04-19T11:33:53.217 回答
1

使用 chmod +x ./test.sh 它应该允许您运行它。

于 2014-07-19T15:35:25.513 回答
1

此外,检查包含脚本的目录/文件系统是否已安装在 nfs 上。root 不会从安装了 nfs 的位置运行脚本。

于 2016-03-22T20:13:08.417 回答
1

在 macOS 中,如果存在 com.apple.quarantine 标志,则可能会发生这种情况。如果ls -l在脚本路径上运行a后看到权限上有@后缀,执行ls -l@ *script_path*确认。然后运行 ​​axattred -d com.apple.quarantine *script_path*以删除隔离标志。

于 2020-10-23T18:10:08.657 回答
0

当您在该文件的目录中时需要使用./test.sh,如果没有,请尝试PATH TO THE SCRIPT。或者您可以将其复制到某个目录/data并将其 chmod 用于 shell,然后执行上述步骤。如果您仍然失败,没关系,因为我有同样的问题,我只是成功了一次。

于 2016-07-20T15:57:41.720 回答
-1

对于noexec默认挂载的文件系统,例如 NFS,exec 在末尾显式添加会有所帮助,即使列表中前面提供的选项noexec也默认暗示,例如user选项。

因此,如果您有以下选项之一:

  • noexec
  • user

将它们更改为:

  • exec或者
  • user,exec

放在最后很重要exec。在某些情况下,仅删除noexec可能会有所帮助,但如果您像user以前一样使用其他选项,则并非完全如此。

于 2020-12-23T21:03:42.443 回答