由于UTF-8 BOM(字节顺序标记)未找到Shebang可执行文件

Séb*_*ien 4 python bash

出于某种原因,我的一个脚本中的shebang不起作用:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "Hello World"
Run Code Online (Sandbox Code Playgroud)

当我执行此文件时,出现错误

 % ./test.py
./test.py: 1: #!/usr/bin/env: not found
Run Code Online (Sandbox Code Playgroud)

有一个与我的内容没有问题的/usr/bin/目录:既envpython在那里,用正确的执行权.

Séb*_*ien 5

问题的原因是我的文件是使用带有BOM(字节顺序标记)的UTF8编码的

删除BOM,即使用不带BOM的UTF8编码文件即可解决此问题。

注意:对于Notepad ++用户,在编辑器中也(奇怪地)将“没有BOM的UTF8”称为“ ANSI作为UTF-8”。


Bak*_*riu 5

这是由于Unix和Linux如何处理shebang.#!必须是文件中的前两个字节.如果你有一个BOM,那么这不再是真的,因此错误.

请注意,从python解释器的角度来看,放置BOM是完全没用的,因为# -*- coding: utf-8 -*-已经告诉python编码.

AFAIK BOM通常与utf-8一起使用.它用于UTF-16 et similia以指定字节顺序.如果编辑器采用错误的编码,您应该能够使用正确的编码显式打开文件.