Mac OS:/ usr / bin / env:错误的解释器:不允许操作

时间:2012-03-31 02:55:09

标签: macos perl bash command-line-interface env

我正在尝试在Mac OS 10.7(Lion)上运行此脚本,我收到错误:

$ bbcolors
-bash: /usr/local/bin/bbcolors: /usr/bin/env: bad interpreter: Operation not permitted

我已成功在我的其他Mac上运行此脚本。这只是this script从Daring Fireball下载并且未经修改。

我发现this person有一个非常类似的问题但是接受的答案是文件系统在mount上有'noexe'选项。我很确定对我来说不是这样的,因为我刚刚将它放在/ usr / local / bin /中并且其他内容工作正常(它也不会从其他地方或其他用户运行,包括root)

$ which bbcolors
/usr/local/bin/bbcolors
$ ls -l /usr/local/bin/bbcolors 
-rwxr-xr-x@ 1 nick  staff  9751 Mar 30 19:09 /usr/local/bin/bbcolors

这是一个Perl脚本而不是编译的二进制文件,而不是那个重要的。这里有一些关于它的价值的额外信息:

$ cat /usr/local/bin/bbcolors |head -n 1
#!/usr/bin/env perl
$ which perl
/usr/bin/perl
$ env | grep PATH
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

5 个答案:

答案 0 :(得分:59)

您是否碰巧在TextEdit中打开/保存文件?

这可以引入文件系统元数据(隔离属性)leading to the symptom you describe

尝试:

xattr -l /usr/local/bin/bbcolors

xattr -d com.apple.quarantine /usr/local/bin/bbcolors

如果您看到隔离属性。

答案 1 :(得分:13)

pilcrow的回答是正确的,但是我提请你注意这样一个事实:如果你正在使用磁盘映像,问题可能会非常混乱,因为com.apple.quarantine属性似乎是从磁盘映像文件继承的到里面的文件(感谢febeling at Apple dev forums注意到!)。

要解决此问题,您必须从磁盘映像中删除隔离属性:

xattr -d com.apple.quarantine /path/to/disk/image

然后弹出并重新安装磁盘映像。然后你的文件将再次清理。

答案 2 :(得分:5)

我已经解决了这个问题。用TextEdit打开命令文件,然后保存。

更多信息:Resolved Operation not permitted

答案 3 :(得分:1)

-bash: /usr/local/bin/bbcolors: /usr/bin/env: bad interpreter: Operation not permitted

/usr/bin/env是否存在?你能跑吗?它本身运行它应该将您的环境变量转储到stdout。

您可以安全地替换:

#!/usr/bin/env perl

使用您选择的perl二进制文件的完整路径,例如:

#!/usr/bin/perl

答案 4 :(得分:0)

我在 BBEdit (CLI: bbedit ~/bin/foo) 中创建了一个 shell 脚本后遇到了这个问题。似乎 macOS 沙箱安全功能会自动隔离由 BBEdit 修改的文件——如果该文件是可执行的,并且可以被 BBEdit 以某种方式访问​​。

修复很简单:首选项 > 应用程序 > 允许

https://www.barebones.com/support/bbedit/quarantine.html