已关闭
[Bug-Report|缺陷反馈]: login.sh 等4个脚本为CRLF行尾,Linux下bad interpreter #798
ivel创建于  12 天前关闭于  5 天前
ivel
ivel
12 天前 创建

一、问题描述(必填)

仓库中以下 4 个 shell 脚本保存为 CRLF(或 CRLF/LF 混合)行尾,在 Linux 上 source/执行时报 /bin/bash^M: bad interpreter 或语法错误。其中 login.sh 位于 skills/cannjudge-submit/,是训练营作业提交流程的入口脚本之一,影响最为直接。

二、受影响文件清单(master 分支,file 命令实测)

  1. skills/cannjudge-submit/login.sh(全 CRLF)
  2. contrib/tutorials/data_structures_compute/07_sort_for_moe_fusion/src/moe_sort_lab/scripts/env_custom_opp.sh(全 CRLF)
  3. contrib/tutorials/data_structures_compute/04_reduce_priority_queue_heap/src/reduce_lab/scripts/env_custom_opp.sh(全 CRLF)
  4. contrib/tutorials/data_structures_compute/04_reduce_priority_queue_heap/src/reduce_lab/scripts/build_runner.sh(CRLF 与 LF 混合)

三、复现方式

git clone 后执行:

file skills/cannjudge-submit/login.sh

=> ASCII text, with CRLF line terminators

bash skills/cannjudge-submit/login.sh

=> /bin/bash^M: bad interpreter: No such file or directory(或 source 时逐行报 command not found)

四、影响分析

  • Windows 编辑器默认保存导致;与此前已修复的 4 个 CRLF 脚本(见 PR !1131)属于同类问题的漏网文件;
  • 走到 cannjudge 提交流程的学员如果直接执行 login.sh 会被行尾问题卡住,且报错信息不直观。

五、修复建议

  • 对上述 4 个文件执行 dos2unix(或 sed -i "s/\r$//")统一为 LF;
  • 建议在仓库根 .gitattributes 中追加 *.sh text eol=lf 规则,从机制上避免再次引入(PR !1131 修复时如已加过,可复查为何这 4 个文件未被覆盖)。
likedislike
ivelivel
12 天前 关联了pull request:fix(sh): convert 4 CRLF scripts to LF to avoid bad interpreter
ink_polymer
ink_polymer成员
6 天前 评论:

尊敬的开发者您好,您的问题已收到,待内部评估后反馈,感谢您的支持

likedislike
Hhw_0086_hrf
5 天前 关联了pull request:fix(scripts): 将 4 个 shell 脚本的 CRLF 行尾统一为 LF
chenmingyu
chenmingyu成员
5 天前 评论:

尊敬的开发者,您好!

感谢您提出的问题,您关联的pr已合入,感谢您的贡献!

该issue即将关闭,如果对课程有其他问题,欢迎在issue中讨论。

likedislike
chenmingyuchenmingyu成员
5 天前 issue状态由 进行中 改变为 已完成
chenmingyuchenmingyu成员
5 天前 关闭了 issue