“错误的解释器:不允许操作” El Capitan 上的错误

Posted

技术标签:

【中文标题】“错误的解释器:不允许操作” El Capitan 上的错误【英文标题】:“bad interpreter: Operation not permitted” Error on El Capitan 【发布时间】:2016-10-10 23:01:44 【问题描述】:

我的团队正在编写一个需要调用外部目录中的 shell 脚本的 Mac OS 应用程序。

该应用程序在 Yosemite (10.10.3) 上运行良好。但是,如果我在 El Capitan (10.11.2) 上运行它,应用程序会从脚本中收到如下错误:

/bin/bash: <path-to-script>: /bin/sh: bad interpreter: Operation not permitted

我可以在这样的简单脚本上触发此错误:

#!/bin/sh
echo "Hello World!"

如果我从终端手动运行脚本,我不会收到错误消息。

应用程序使用文件选择器打开脚本目录。我确认应用程序可以从此目录中读取其他文件。

/bin/sh 更改为/bin/bash/bin/sh 的副本在不同的路径上会产生与新解释器路径相同的错误。

一位同事在禁用系统完整性保护的 El Capitan 机器上测试了这个问题,但他得到了同样的错误。

我正在从 .pkg 文件安装测试应用程序。权利是:

<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>

添加 com.apple.security.files.user-selected.executable 权利并没有什么不同

如果我尝试运行在包构建的中间步骤中生成的 .app,我可以运行脚本而不会出现错误。

下面的问题描述了一个类似的错误。但是,我检查了应用程序和脚本,发现两者都没有设置com.apple.quarantine 属性。

Mac OS: /usr/bin/env: bad interpreter: Operation not permitted

https://apple.stackexchange.com/questions/49589/bash-applications-mvim-bin-sh-bad-interpreter-operation-not-permitted

--- 更新 ----

我们在 PKG 权利列表中添加了两个:

<key>com.apple.security.scripting-targets</key>
<true/>
<key>com.apple.security.temporary-exception.apple-events</key>
<true/>

我们尝试通过 AppleScript (.scpt) 文件(存储在应用程序目录中)运行简单的 .sh 文件,我们还确认 .sh 文件和 .scpt 文件也具有任何扩展属性,但我们仍然有这个错误。

以下分别显示了 AppleScript 和 shell 脚本文件上的 ls -@Oel 命令。

$ ls -@Oel TestMXMLCall.scpt 
-rwxrwxrwx  1 root  wheel  - 2302 Jun 15 03:12 TestMXMLCall.scpt
$ ls -@Oel /usr/local/bin/mxmlc
-rwxr-xr-x  1 santanukarar  staff  - 2190 Jun 15 01:17 /usr/local/bin/mxmlc

【问题讨论】:

可能是行尾样式,也许脚本使用dos-stype CR-LF或unix-style only LF而不是only-CR?只是一个想法 如果你明确地运行/bin/sh /path/to/script会发生什么?它会运行吗? ls -l /bin/sh 有什么用? @anishsane 如前所述,该命令在终端上手动运行但不在应用程序内部运行时运行良好。 @Cdarke 如果我在终端上手动运行命令,我有这个:-r-xr-xr-x 1 root wheel 632672 Dec 3 2015 /bin/sh。如果您不这么认为,我将计划从我们的应用程序中运行它。 【参考方案1】:

试试这个: $ ls -l@ whereverthescriptis 如果它说它有 com.apple.quarantine,那就是问题所在。在上面运行其中一个,从最不危险到最危险:

$ xattr -d com.apple.quarantine whereverthescriptis   # delete that attr
$ xattr -c whereverthescriptis    # delete ALL the attrs on file
$ xattr -c *         # on every file in this dir
$ xattr -cr .        # and all subdirectories

【讨论】:

2020 年刚在 macOS Catalina 上遇到这个问题。 工作于 2021 年 macOS Monterey,谢谢。【参考方案2】:

我希望这会对某人有所帮助,因为我的解决方案有点独特在 androidios 上。

事实证明,我必须转到包含该项目的文件夹,并取得该文件夹的所有权。您可以在 Mac 上执行此操作,方法是转到包含 Flutter 项目的文件夹,然后从上下文菜单中单击“获取信息”。然后将您的访问权限更改为“只读”,然后在底部的最后一个窗格中恢复为“读写”。

按照上述建议之一,通过转到终端从文件夹中删除 Apple 隔离属性,然后使用“cd”命令导航到包含 Flutter 项目的文件夹,并输入以下命令:

xattr -dr com.apple.quarantine [your flutter project directory name]

就是这样!现在,Android Studio 或您选择的 IDE 将能够从该文件夹运行 iOS 和 Android 版本。

【讨论】:

这对我有用。谢谢 我真的很高兴它做到了。祝你好运。【参考方案3】:

如果你只使用 pod,我会解决它

    pod 解体 pod 安装

项目准备运行

【讨论】:

您能解释一下 pod 实际上是什么以及我将如何安装它吗?只是为了防止一些误会

以上是关于“错误的解释器:不允许操作” El Capitan 上的错误的主要内容,如果未能解决你的问题,请参考以下文章

sh 创建可启动的El Capitan ISO

markdown 全新安装 - OS X 10.11 El Capitan

sh 验证/修复OS X El Capitan上的磁盘权限

markdown 如何修复OS X El Capitan中的Homebrew权限问题?

text OS X:创建与VirtualBox兼容的El Capitan ISO

sh 在OS X El Capitan上安装Autoconf和Automake