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

Nic*_*ick 40 macos bash perl env command-line-interface

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

$ bbcolors
-bash: /usr/local/bin/bbcolors: /usr/bin/env: bad interpreter: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

我已成功在我的其他Mac上运行此脚本.这只是从Daring Fireball下载和修改的脚本.

我发现这个人有一个非常类似的问题,但接受的答案是文件系统在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
Run Code Online (Sandbox Code Playgroud)

它是一个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
Run Code Online (Sandbox Code Playgroud)

pil*_*row 76

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

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

尝试:

xattr -l /usr/local/bin/bbcolors
Run Code Online (Sandbox Code Playgroud)

xattr -d com.apple.quarantine /usr/local/bin/bbcolors
Run Code Online (Sandbox Code Playgroud)

如果您看到隔离属性.

  • 是的,我无法回答我自己的问题,但是你从我上面的评论中得到了正确的信息.FWIW:在文件上执行`ls -al @`也可以看到`com.apple.quarantine`. (5认同)
  • 作为参考,如果你意识到你有一个带有`com.apple.quarantine`属性的整个目录树,请从目录中运行`xattr -dr com.apple.quarantine .`来清除其中的所有文件.通过解压缩我在本地网络上复制的zip文件,我得到了一个大规模隔离的目录. (4认同)
  • 哈.我发现解决方案*没有*阅读你的评论.这会教会我更频繁地刷新. (2认同)
  • com.apple.quarantine也可能在磁盘映像上设置,导致它与隔离区一起安装. (2认同)

KPM*_*KPM 13

pilcrow的答案是正确的,但我提请你注意这样一个事实:如果你正在使用磁盘映像,问题可能会非常混乱,因为com.apple.quarantine属性似乎是从磁盘映像文件继承到文件内部(感谢在Apple开发论坛上发誓注意到这一点!).

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

xattr -d com.apple.quarantine /path/to/disk/image
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

更多信息:不允许已解决的操作