已关闭
两个实验环境脚本的 CRLF 行尾导致 Bash 无法加载 #771
KaranocaVe创建于  15 天前关闭于  5 天前
KaranocaVe
KaranocaVe
15 天前 创建

两个实验环境脚本的 CRLF 行尾导致 Bash 无法加载

影响文件

  • contrib/tutorials/data_structures_compute/04_reduce_priority_queue_heap/src/reduce_lab/scripts/env_custom_opp.sh
  • contrib/tutorials/data_structures_compute/07_sort_for_moe_fusion/src/moe_sort_lab/scripts/env_custom_opp.sh

两个实验的 README 都要求在构建 runner 前 source 对应环境脚本。

问题

这两个脚本的每一行都使用 CRLF。Bash 将 if 块行尾的回车符并入命令,导致 bash -n 均返回 2。source 脚本时会出现 $'\r': command not found,并在设置 ASCEND_CUSTOM_OPP_PATH 前退出。

将相同脚本内容转换为 LF 后,语法检查可通过,生成的 set_env.bash 可加载,custom OPP 路径也能正确导出。这是文档构建入口上的确定性失败,不只是行尾格式差异。

预期与实际

  • 预期:运行 build_ops.sh 生成本地包后,source scripts/env_custom_opp.sh 成功,为 runner 配置环境。
  • 实际:两个脚本都无法通过 Bash 解析,环境未完成配置。

修复

仅将两个 env_custom_opp.sh 的行尾从 CRLF 转为 LF,不修改命令、路径或环境行为。

Validation

验证

基线

git ls-files --eol 显示两个目标脚本都是 i/crlf w/crlf;04 脚本有 26 行 CRLF,07 脚本有 25 行 CRLF。

在包含 stub set_env.bash 的生成包 fixture 中:

检查 04 脚本 07 脚本 结果
bash -n scripts/env_custom_opp.sh 2 2 均报告 unexpected end of file
set -e; source scripts/env_custom_opp.sh 127 127 均报告 $'\r': command not found,未导出环境变量

失败发生在 CANN 或 NPU 操作之前,无需设备即可复现。

修复后

检查 退出码 结果
两个修复后脚本运行 bash -n 0 语法检查通过
source 修复后的 04 脚本和 stub 包 0 加载 set_env.bash,导出预期 custom OPP 路径
source 修复后的 07 脚本和 stub 包 0 环境配置成功
mock CMake 后运行 07 build_runner.sh 0 到达两条 CMake 构建命令
02 stack 实验的 LF helper 对照 0 正常通过

去掉 CRLF 标记后,修复前后的脚本字节一致;没有命令或路径变化。

Patch 与当前版本检查

  • 在当前 master 上,git apply --check --whitespace=error-all fix.patch 通过,两个目标文件仍为 CRLF。
  • 应用 patch 后两个脚本均通过 bash -n,git diff --check 通过;变更仅为两个目标文件的行尾转换。
  • git apply --reverse --check fix.patch 通过。

以上检查覆盖 shell 启动流程,不代表算子编译通过。无需设备即可复现和验证此问题。

本次提交前复核

  • 基线为 cann/cann-learning-hub/master@793a252c74750a3e49f3f1749f9cb975a19e28dc;git apply --check --whitespace=error-all fix.patch 通过,patch 仅将两个目标脚本从 CRLF 转为 LF。
  • 应用 patch 后,两个脚本均通过 bash -n,git diff --check 通过。
  • 验证范围仅为 shell 语法和启动;未运行 NPU 算子编译或设备验证。

关联 PR: https://gitcode.com/cann/cann-learning-hub/merge_requests/1092

likedislike
KaranocaVeKaranocaVe
15 天前 关联了pull request:修复两个实验环境脚本的 CRLF 行尾问题
KaranocaVeKaranocaVe
15 天前 修改了issue 的描述
chenmingyu
chenmingyu成员
15 天前 评论:

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

likedislike
chenmingyu
chenmingyu成员
15 天前 评论:

您好,感谢反馈!

经核对,这两个实验的 notebook 在执行前已内置脚本行尾归一化(会将实验目录下所有脚本统一为 LF),正常使用流程不会触发您描述的问题,实际运行可正常通过。

如您在其他场景下遇到具体报错,欢迎附上报错信息与截图,我们会进一步跟进。

如果有其他问题,欢迎来issues中讨论 。

image.png

likedislike
KaranocaVe
KaranocaVe
11 天前 评论:

明白 notebook 路径会先统一行尾。本次补充的场景是按实验 README 构建后,在生成的 custom OPP 包里直接 source scripts/env_custom_opp.sh:CRLF 脚本 bash -n 报 unexpected end of file,source 报 $'\r': command not found;转换为 LF 后两者均通过。也就是说 notebook 执行路径可规避,但直接 Bash source 仍可复现。若这一直接使用方式不受支持,请告知。

likedislike
chenmingyu
chenmingyu成员
5 天前 评论:

尊敬的开发者,您好!

感谢您提出的问题,该问题虽然不会对正常课程造成影响,但确实是隐藏的代码bug,您关联的pr已合入,感谢您的贡献!

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

likedislike
chenmingyuchenmingyu成员
5 天前 issue状态由 进行中 改变为 已完成
chenmingyuchenmingyu成员
5 天前 关闭了 issue
CANN-robotCANN-robot成员
5 天前 添加了label:resolved