env: python\r: No such file or directory环境变量: python\r: 没有这个文件或目录。
env: python\r: No such file or directory环境变量: python\r: 没有这个文件或目录。
我的Python脚本beak
包含以下的shebang:
#!/usr/bin/env python
当我运行脚本$ ./beak
时,我得到了
env: python\r: No such file or directory
我之前从一个仓库中拉取了这个脚本。这可能是什么原因呢?
admin 更改状态以发布 2023年5月21日
在 vim
或 vi
中打开文件,并执行以下命令:
:set ff=unix
保存并退出:
:wq
完成!
说明
ff
代表文件格式,可以接受 unix
(\n
),dos
(\r\n
)和 mac
(\r
)这些值。对于现代的 Mac 电脑,请使用 unix
,而不是 mac
。
要了解有关 ff
命令的更多信息:
:help ff
:wq
代表写入并退出,更快的等效方法是 Shift+zz(即按住 Shift 键,然后按两次z
键)。
这两个命令必须在 命令模式 下使用。
离题:如果你不小心在 vim 中卡住了,并且需要退出,请看看这里。
在多个文件上使用
实际上不必在 vim 中打开文件。可以直接从命令行修改:
vi +':wq ++ff=unix' file_with_dos_linebreaks.py
要处理多个 *.py
文件(在 bash
中):
for file in *.py ; do vi +':w ++ff=unix' +':q' "${file}" done
虽然看起来很简单,但是上面的 bash 语法会在文件名包含空格、引号、破折号等字符时出错。一个更可靠的替代方案是:
find . -iname '*.py' -exec vi +':w ++ff=unix' +':q' {} \;
删除 BOM 标志
有时即使将 Unix 换行符设置完毕后,运行文件时仍可能会出现错误,特别是当该文件是可执行文件且有一个 shebang 时。脚本可能会有一个 BOM 标记(如 0xEFBBBF
或其他标记),使得 shebang 无效并导致 shell 报错。在这种情况下,python myscript.py
会正常工作(因为 Python 可以处理 BOM),但是当设置可执行位后,./myscript.py
会失败,因为您的 shell(如 sh、bash、zsh 等)无法处理 BOM 标志。 (通常是 Windows 编辑器如记事本等创建带有 BOM 标记的文件。)
可以通过在 vim
中打开文件并执行以下命令来删除 BOM:
:set nobomb