6

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

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

当我执行这个文件时,我得到一个错误

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

我的目录内容没有问题/usr/bin/:两者envpython存在,具有正确的执行权限。

4

2 回答 2

9

这是由于 Unix 和 Linux 如何处理 shebang。#!必须是文件中的前两个字节。如果您有 BOM,那么这将不再正确,因此会出现错误。

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

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

于 2013-09-28T09:47:55.270 回答
5

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

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

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

于 2013-09-28T09:45:38.057 回答