我的团队正在编写一个需要调用外部目录中的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
--- 更新 ----
我们在 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
/bin/sh /path/to/script
,它会以那个方式运行吗? - anishsanels -l /bin/sh
得到什么? - cdarke-r-xr-xr-x 1 root wheel 632672 Dec 3 2015 /bin/sh
。如果您有其他想法,我将计划从我们的应用程序中运行此命令。 - Santanu Karar