bash 权限被拒绝但 sh 可以工作

bash 权限被拒绝但 sh 可以工作

我在已安装的 Windows 分区上的一个小脚本拒绝直接执行(shebang 是#!/bin/bash),但有趣的是用bash/sh调用它可以。该脚本只是grepsed命令的集合。

驱动器安装时具有完整权限:

defaults,windows_names,rw,auto,user

因此,对于文件得到

-rwxrwxrwx 1 root root

对于该文件。

那里发生了什么事?

答案1

最有可能的是,Windows 分区是在该noexec标志打开的情况下安装的。您可以在输出中确认:

mount

在输出中,您可能会(rw,noexec)在行尾看到类似的内容。该noexec标志不是默认值,因此当显式配置它以这种方式安装时,通常会发生这种情况。

当您运行脚本时bash /path/to/script.sh,它会起作用,因为在这种情况下,您执行的不是脚本,而是执行bash,它解释其参数中给出的脚本。

作为补充说明:

但有趣的是用 sh 调用它是有效的。

由于脚本具有 shebang #!/bin/bash,因此您应该使用bash而不是sh执行它。脚本的作者可能出于某种原因使用此 shebang,并且某些实现sh(或它在您的系统中链接到的任何内容)可能不支持某些 Bash 功能。

最后,为了能够直接执行脚本,您可以exec尝试使用flag 而不是 来安装驱动器noexec,但首先考虑这是否真的是一个好主意。默认安装noexec是为了安全功能,以防止意外执行来自不受信任来源的潜在有害文件。我认为你不应该改变这一点。只需运行bash.

相关内容