![bash 权限被拒绝但 sh 可以工作](https://linux22.com/image/35554/bash%20%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%E4%BD%86%20sh%20%E5%8F%AF%E4%BB%A5%E5%B7%A5%E4%BD%9C.png)
我在已安装的 Windows 分区上的一个小脚本拒绝直接执行(shebang 是#!/bin/bash
),但有趣的是用bash
/sh
调用它可以。该脚本只是grep
和sed
命令的集合。
驱动器安装时具有完整权限:
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
.