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 |
- 对于可能出现的问题,您已经覆盖了大部分正常的基础;做得很好。运行perl -v时会发生什么?在Perl脚本(bbcolors中)的初始注释行之后会出现什么?另外,权限后的@表示该文件有一些辅助属性信息;您是否调查过(可能是ls -@的情况)?
- 我用xattr -r com.apple.quarantine /file/path解决了这个问题,我会回答我自己的问题,但我有几个小时没有足够的代表来做这件事。
- 江户十一〔五〕号?(-r的意思是"递归的";-d的意思是"删除的")我一直忘了这个命令叫什么。
您是否在textedit中打开/保存了文件?
这可以引入文件系统元数据(隔离属性),从而导致您描述的症状。
尝试:
1
| xattr -l /usr /local/bin /bbcolors |
和
1
| xattr -d com .apple .quarantine /usr /local/bin /bbcolors |
如果看到隔离区属性。
- 是的,我不能回答我自己的问题,但你从我上面的评论中得到了正确的信息。fwiw:也值得在文件上做一个ls -al@来查看com.apple.quarantine。
- 哈。我没有看你的评论就找到了解决方案。这将教会我更经常地刷新。
- 作为参考,如果您意识到您有一个具有com.apple.quarantine属性的完整目录树,那么从目录内部运行xattr -dr com.apple.quarantine .以清除其中的所有文件。通过解压缩本地网络上复制的zip文件,我得到了一个像这样的大规模隔离目录。
- 这是1000倍!谢谢。我稍微改变一下的解决方案是xattr -rd com.apple.quarantine [path to where shit hit the fan]。
- 也可以在磁盘映像上设置com.apple.quarantine,使其与quarantine一起装入。
- 对于稀疏的图像,我没有在sparse bundle本身上找到com.apple.quarantine属性,但它隐藏在包中的一个文件中。清除该属性需要-r标志。
- 在应用程序环境中运行此命令时,出现错误:xattr:[errno 1]不允许执行以下操作:[文件路径]。我能用什么命令来解决这个问题吗?
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。
您可以安全地更换:
使用您的perl二进制选择的完整路径,例如: