我的 Python 脚本 beak
包含以下 shebang:
#!/usr/bin/env python
当我运行脚本 $ ./beak
时,我得到
env: python\r: No such file or directory
我之前从存储库中提取了这个脚本。这可能是什么原因?
原文由 Niklas R 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的 Python 脚本 beak
包含以下 shebang:
#!/usr/bin/env python
当我运行脚本 $ ./beak
时,我得到
env: python\r: No such file or directory
我之前从存储库中提取了这个脚本。这可能是什么原因?
原文由 Niklas R 发布,翻译遵循 CC BY-SA 4.0 许可协议
打开 vim
或 vi
中的文件,并执行以下命令:
:set ff=unix
保存并退出:
:wq
完毕!
ff
stands for _file format_ , and can accept the values of unix
( \n
), dos
( \r\n
) 和 mac
( \r
) (仅用于 pre-intel mac,在现代 mac 上使用 unix
要阅读有关 ff
命令的更多信息:
:help ff
:wq
代表 W rite 和 Q uit,更快的等价物是 Shift
+ zz
(即按住 Shift 然后按 z
两次)。
这两个命令都必须在 命令模式下 使用。
没有必要在 vim 中实际打开文件。可以直接从命令行进行修改:
vi +':wq ++ff=unix' file_with_dos_linebreaks.py
处理多个 *.py
文件(在 bash
中):
for file in *.py ; do
vi +':w ++ff=unix' +':q' "${file}"
done
😱 offtopic :如果你碰巧卡在 vim 中需要退出, 这里 有一些简单的方法。
有时,即使在设置了 unix 行尾之后,您仍然可能会在运行文件时遇到错误,尤其是当文件是可执行文件并且具有 shebang 时。该脚本可能有一个 BOM 标记(例如 0xEFBBBF
或其他),这会使 shebang 无效并导致 shell 抱怨。在这些情况下 python myscript.py
可以正常工作(因为 python 可以 处理 BOM)但是 ./myscript.py
将在设置执行位时失败,因为你的 shell(sh、bash、zsh 等) 可以’ 处理BOM标记。 (创建带有 BOM 标记的文件的通常是 记事本 等 Windows 编辑器。)
可以通过打开文件 vim
并执行以下命令来删除 BOM:
:set nobomb
原文由 ccpizza 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答863 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
该脚本包含 CR 字符。 shell 将这些 CR 字符解释为参数。
解决方案:使用以下脚本从脚本中删除 CR 字符。