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

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

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

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

我已经在我的其他Mac上成功运行了这个脚本。只是下载了这个脚本,并且没有修改。

我发现这个人有一个非常相似的问题,但公认的答案是文件系统在挂载时有一个"noexe"选项。我很确定这不是我的情况,因为我刚把它放在/usr/local/bin/里,其他东西也没问题(它也不会从其他地方运行,也不会作为其他用户运行,包括根用户)。

1
2
3
4
$ 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脚本,而不是编译后的二进制文件,这不重要。以下是一些关于它价值的额外信息:

1
2
3
4
5
6
$ 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


您是否在textedit中打开/保存了文件?

这可以引入文件系统元数据(隔离属性),从而导致您描述的症状。

尝试:

1
xattr -l /usr/local/bin/bbcolors

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

如果看到隔离区属性。


Pilcrow的回答是正确的,但是我提请您注意,如果您使用的是磁盘映像,那么问题可能会非常混乱,因为com.apple.quarantine属性似乎是从磁盘映像文件继承到文件内部的(这要归功于Apple Dev Forums上的febeling注意到这一点!).

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

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

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


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

详细信息:不允许解析的操作


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

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

您可以安全地更换:

1
#!/usr/bin/env perl

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

1
#!/usr/bin/perl