linux执行脚本报“no such file or directory”主因是windows编辑导致shebang行含\r,使#!/usr/bin/env python3\r被误解析为非法解释器路径;需用dos2unix、sed或git自动归一化换行符为lf。

脚本在 Linux 上执行时报 No such file or directory,八成是 Windows 编辑后直接传过去、换行符没处理——#!/usr/bin/env python3\r 被当成了带 \r 的非法解释器路径。
为什么 ./script.py 在 Linux 上直接报错?
Linux 的 shebang 解析器严格按字节匹配,遇到 \r\n 会把 python3\r 当成解释器名,而系统里显然没有这个命令。错误信息里那个“3”其实是 \r 后面的换行被截断显示的结果。
-
vim script.py进入后输入:set ff,若显示fileformat=dos就确认是 CRLF 问题 -
cat -v script.py会看到行尾有^M,那就是\r - 即使脚本内容逻辑完全正确,shebang 行带
\r就根本不会进入 Python 解释器
open() 写文件时如何避免写入 \r\n?
用文本模式写脚本、配置或 shell 文件时,Python 默认会把 \n 自动转成系统原生换行符(Windows 下变 \r\n),这反而会埋雷。必须显式禁用自动转换。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 写 shell 脚本、启动脚本等需跨平台执行的文件时,强制指定
newline="\n" -
with open("deploy.sh", "w", newline="\n") as f:—— 这样无论在哪运行,写进去的都是纯\n - 不要依赖
os.linesep来写可执行脚本,它会让 Windows 产出\r\n,破坏 Linux 兼容性
批量修复已存在的 dos 格式文件
别一个个手动改,用现成工具或一行 Python 就能扫清。
- 装
dos2unix:Ubuntu/Debian 上sudo apt install dos2unix,然后dos2unix *.py *.sh - 没权限装工具?用 Python 一行修复:
python3 -c "import sys; [open(f, 'rb').read().replace(b'\r\n', b'\n').decode().strip() and open(f, 'w', newline='').write(open(f, 'rb').read().replace(b'\r\n', b'\n').decode()) for f in sys.argv[1:]]" script.py(推荐先用sed -i 's/\r$//' script.py更稳妥) - Git 用户可在项目根目录加
.gitattributes:写入* text=auto eol=lf,让 Git 自动归一化换行符
最易被忽略的是:shebang 行本身不能靠 print() 或字符串拼接生成,必须确保其首行是纯 LF 结尾;哪怕只有一处 \r,整个脚本就无法被 Linux 当作可执行文件加载。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










