当前位置: 首页 > news >正文

【亲测有效】解决 “Batch script contains DOS line breaks (\r\n)” 报错

【亲测有效】解决 “Batch script contains DOS line breaks (\r\n)” 报错

适用场景:在 Linux/Slurm 集群上 sbatch 提交脚本或运行 Shell 脚本时遇到 “DOS line breaks (\r\n) instead of UNIX line breaks (\n)” 的报错。

文章目录

  • 【亲测有效】解决 “Batch script contains DOS line breaks (\r\n)” 报错
    • 一、问题重述
    • 二、根因分析:CRLF vs. LF
    • 三、解决方案大全
      • 方案 1:一条命令搞定 `dos2unix` ✅
      • 方案 2:`sed` & `tr` 手工去回车
      • 方案 3:Vim/Neovim 修改文件格式
      • 方案 4:VS Code 直接切换
      • 方案 5:Git 全局避免 CRLF(可选)
    • 四、如何自检脚本是否还有 `\r`?
    • 五、解决方法小结


一、问题重述

在 Windows 或 VS Code 下编辑完 run_python.sbatch,上传到集群后执行:

(环境名) [用户名@节点名 文件夹]$ sbatch run_python.sbatch
sbatch: error: Batch script contains DOS line breaks (\r\n)
sbatch: error: instead of expected UNIX line breaks (\n).

脚本明明写得没问题,却无法提交。究其原因,就是换行符不兼容。


二、根因分析:CRLF vs. LF

  1. Windows 系统(含部分编辑器)使用 CRLF (\r\n) 作为换行符;
  2. Linux/Unix 默认使用 LF (\n);
  3. sbatch 解析脚本时检测到意外的 \r 回车符,便拒绝执行。

三、解决方案大全

方案 1:一条命令搞定 dos2unix

# 安装好 dos2unix 的系统
dos2unix run_python.sbatch
sbatch run_python.sbatch   # 再次提交

若仅输出 “dos2unix: converting file run_python.sbatch to Unix format ...”,没有出现报错,即转换成功。


方案 2:sed & tr 手工去回车

集群没有 dos2unix 时,用内置命令即可:

# 备份原文件
cp run_python.sbatch run_python.sbatch.bak# 方法 A:sed
sed -i 's/\r$//' run_python.sbatch# 方法 B:tr
tr -d '\r' < run_python.sbatch > tmp && mv tmp run_python.sbatch

方案 3:Vim/Neovim 修改文件格式

vim run_python.sbatch
:set ff=unix   # fileformat=unix
:wq            # 保存退出

方案 4:VS Code 直接切换

  1. 右下角状态栏点击 “CRLF”;
  2. 选择 “LF”;
  3. Ctrl + S 保存;再次上传或 Git push。

方案 5:Git 全局避免 CRLF(可选)

# 仅对当前仓库
git config core.autocrlf false# 或全局
git config --global core.autocrlf input

这样以后在 Windows 提交到 Linux 也会保持 LF。


四、如何自检脚本是否还有 \r

grep -n $'\r' run_python.sbatch   # 有输出说明仍存在 \r

五、解决方法小结

  1. 统一开发环境:建议在 WSL、Docker、远程 Vim 等 Linux 环境直接写脚本。
  2. 版本控制钩子:在 Git 钩子或 CI 中加入 dos2unix 检查,防患于未然。
  3. 编辑器配置:VS Code、Sublime、Notepad++ 都可设置默认保存为 LF。

脚本因换行符差异导致的 sbatch 报错,是新手在 HPC 环境最常见的坑之一。在 Linux 系统中,LF 才是正确的换行符。

希望本文能帮你一次性解决这个小问题!


文章转载自:

http://vquSlciL.dmsxd.cn
http://GkTjRLqr.dmsxd.cn
http://VpLSbGgc.dmsxd.cn
http://FGJrtohP.dmsxd.cn
http://JpYByVGI.dmsxd.cn
http://zF0Qakb4.dmsxd.cn
http://PFwEsxK5.dmsxd.cn
http://dcOU9aHs.dmsxd.cn
http://DSsftJz7.dmsxd.cn
http://pgwsIj0H.dmsxd.cn
http://k3ZDBj0F.dmsxd.cn
http://cMsPOA95.dmsxd.cn
http://qGKdAUdj.dmsxd.cn
http://hBqg4vLT.dmsxd.cn
http://XHpM6vlg.dmsxd.cn
http://j49tmfJG.dmsxd.cn
http://gi87SnKw.dmsxd.cn
http://8Gk1Gr3l.dmsxd.cn
http://Afbzg8wS.dmsxd.cn
http://JsL4LGY1.dmsxd.cn
http://uMthKVDG.dmsxd.cn
http://GbI5ukfs.dmsxd.cn
http://V0UJ0xZL.dmsxd.cn
http://wmmc56er.dmsxd.cn
http://uLj535lz.dmsxd.cn
http://n80kjAOq.dmsxd.cn
http://MhQZirSE.dmsxd.cn
http://bZgLIFox.dmsxd.cn
http://U40mIvS5.dmsxd.cn
http://lSPqt1JH.dmsxd.cn
http://www.dtcms.com/a/382251.html

相关文章:

  • 集值优化问题:理论、应用与前沿进展
  • 17、逻辑回归与分类评估 - 从连续到离散的智能判断
  • AMD KFD的BO设计分析系列3-1: GTT的实现分析
  • 如何实现静态库与动态库的制作
  • 【硬件开发】电源抑制比PSRR
  • 基于Redisson的分布式锁原理深度解析与性能优化实践指南
  • 【Leetcode hot 100】101.对称二叉树
  • 破解多校区高校运维困局,协同效率提升60%的智能运维方案
  • 王道计算机组成原理 学习笔记
  • Matplotlib:绘制你的第一张折线图与散点图
  • 即梦批量生成图片软件使用运营大管家-即梦图片批量生成器
  • Qt中解析JSON文件
  • 从静态表查询冲突到其原理
  • Git 版本回退与撤销修改
  • Tcpdump: The Basics Tcpdump 基础
  • 智慧物联网水利大数据平台建设方案PPT(70页)
  • 字典树初步
  • GitHub 热榜项目 - 日榜(2025-09-13)
  • 18、决策树与集成学习 - 从单一智慧到群体决策
  • 基于 Spring 的策略模式框架,用于根据不同的类的标识获取对应的处理器实例
  • Python:OpenCV 教程——从传统视觉到深度学习:YOLOv8 与 OpenCV DNN 模块协同实现工业缺陷检测
  • UTC时间戳转换
  • 【Unity进阶】Unity发布PC端,隐藏并自定义默认标题栏
  • 【Qt】编写Qt自定义Ui控件步骤
  • HTTP 状态码背后的逻辑:从请求到响应的完整流程解析(含完整流程图)
  • 如何规划活动宣传软文的发布节奏?
  • 什么是NTP?
  • n8n工作流平台入门学习指南
  • JVM 四大晋升机制
  • ES——(一)基本概念