【问题标题】:Shebang executable not found because of UTF-8 BOM (Byte Order Mark)由于 UTF-8 BOM(字节顺序标记),找不到 Shebang 可执行文件
【发布时间】:2021-01-26 16:52:56
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python bash


    【解决方案1】:

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

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

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

    【讨论】:

    • 事实上,根据 Unicode 标准,“对于 UTF-8,既不需要也不建议使用 BOM,但在 UTF-8 数据从使用BOM 或 BOM 用作 UTF-8 签名的地方。"
    • 不知情的程序员使用 Notepad++ 犯错误的风险很高,因为编辑器显示为 default UTF8 编码(简称为“UTF-8”)是实际上是使用 BOM 的“风险”编码。
    • @Sebastien Notepad++ 是一个 Windows 程序。如果您想使用众所周知的封闭系统的一部分的编辑器生成跨平台代码,您必须在所有配置上测试代码,因为编辑器不会关心这些细节来制作代码便携的。即使使用更多尝试跨平台的开放软件也是如此。
    【解决方案2】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2012-06-21
    • 2011-07-13
    • 2011-10-30
    • 2020-05-29
    • 2011-02-03
    • 2021-08-08
    • 2011-06-21
    相关资源
    最近更新 更多