No se encontró el ejecutable de Shebang debido a UTF-8 BOM (marca de orden de bytes)

Por alguna razón, el shebang en uno de mis scripts no funciona:

#!/usr/bin/env python # -*- coding: utf-8 -*- print "Hello World" 

Cuando ejecuto este archivo, me sale un error.

  % ./test.py ./test.py: 1: #!/usr/bin/env: not found 

No hay ningún problema con el contenido de mi directorio /usr/bin/ : tanto env como python están ahí, con los derechos de ejecución correctos.

Esto se debe a cómo Unix y Linux manejan el shebang. #! Deben ser los dos primeros bytes en el archivo. Si tiene una lista de materiales, esto ya no es cierto, de ahí el error.

Tenga en cuenta que poner una lista de materiales es completamente inútil desde el punto de vista del intérprete de python, ya que la # -*- coding: utf-8 -*- ya le dice a python la encoding.

AFAIK BOM normalmente no se utiliza con utf-8. Se utiliza para UTF-16 et similia para especificar el orden de bytes. Si el editor asume una encoding incorrecta, debería poder abrir explícitamente el archivo con la encoding correcta.

La causa del problema es que mi archivo fue codificado usando UTF8 con BOM (Byte Order Mark).

La eliminación de la lista de materiales, es decir, la encoding del archivo mediante UTF8 sin BOM resuelve el problema.

NB: para usuarios de Notepad ++, “UTF8 sin BOM” también se llama (extrañamente) “ANSI como UTF-8” en el editor.