Shebang executable not found because of UTF-8 BOM (Byte Order Mark)

前端 未结 2 1357
感情败类
感情败类 2020-12-11 08:43

For some reason the shebang in one of my scripts does not work:

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

When I

相关标签:
2条回答
  • 2020-12-11 09:01

    The cause of the problem is that my file was encoded using UTF8 with BOM (Byte Order Mark).

    Removing the BOM, i.e. encoding the file using UTF8 without BOM solves the issue.

    NB: for Notepad++ users, "UTF8 without BOM" is also called (weirdly) "ANSI as UTF-8" in the editor.

    0 讨论(0)
  • 2020-12-11 09:13

    This is due to how Unix and Linux handle the shebang. #! must be the first two bytes in the file. If you have a BOM then this isn't true anymore hence the error.

    Note that putting a BOM is completely useless from the point of view of the python interpreter, since the # -*- coding: utf-8 -*- already tells python the encoding.

    AFAIK BOM is usually not used with utf-8. It is used for UTF-16 et similia in order to specify the byte-order. If the editor assumes the wrong encoding you should be able to explicitly open the file with the correct encoding.

    0 讨论(0)
提交回复
热议问题