已关闭
[Bug-Report|缺陷反馈]: install_deps.sh 在 Ubuntu 18.04 安装 CMake 时管道命令被 run_command 吞掉输出,可能导致 Kitware key 导入失败 #2143
Y_ang_s创建于 7月4日关闭于 7月7日
陈思
7月6日 评论:
7月6日 评论:
您好,感谢反馈,问题确认和修复中。


7月7日 关联了pull request:fix: 修复 install_deps.sh 中管道与 source 场景被 run_command 吞输出的问题
7月7日 关闭了 issue
7月7日 添加了label:resolved
Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
一、问题描述 (必填)
在阅读并验证 ops-math 仓库的依赖安装脚本时,发现 install_deps.sh 中 install_cmake() 针对 Ubuntu 18.04 的 CMake 安装逻辑存在潜在问题。
脚本中 run_command() 会通过如下方式执行命令:
output=("@" 2>&1)
该实现会把被执行命令的标准输出捕获到变量 output 中,成功时并不会再输出到标准输出。
但在 Ubuntu 18.04 分支中,脚本又将 run_command wget ... 放在管道前面:
run_command wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
由于 run_command 成功时不会把 wget 下载到的 key 内容继续写入 stdout,后续 gpg --dearmor - 实际上可能收到空输入,从而导致 Kitware 源 key 导入失败,进而影响 CMake 依赖安装流程。
该问题会影响在 Ubuntu 18.04 且本机 CMake 版本低于项目要求或未安装 CMake 的环境中,通过 bash install_deps.sh 一键安装依赖的体验。
二、环境信息 (可选)
仓库:https://gitcode.com/cann/ops-math
分支:master
相关文件:install_deps.sh
触发场景:Ubuntu 18.04,执行 bash install_deps.sh,且需要进入 install_cmake() 中 Ubuntu 18.04 的 Kitware 源配置逻辑
说明:目前主要基于脚本逻辑和最小复现验证发现问题,未在真实 Ubuntu 18.04 全量安装环境中完成端到端验证
三、重现步骤 (可选)
也可以用最小逻辑验证该问题:
run_command() {
local cmd="∗"if!output=("$@" 2>&1); then
exit 1
fi
}
run_command printf hello | wc -c
实际输出为 0,说明管道后续命令没有收到 printf hello 的内容;而直接执行:
printf hello | wc -c
输出为 5。
四、预期结果 (可选)
希望 install_deps.sh 在 Ubuntu 18.04 上安装 CMake 时,能够正确将 Kitware key 内容传递给 gpg --dearmor,顺利完成软件源配置和 CMake 安装。
建议修复方向:
wget -qO- https://apt.kitware.com/keys/kitware-archive-latest.asc | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
💡 备注(选填)
该问题属于依赖安装脚本的可用性问题,可能影响新用户按照文档执行 bash install_deps.sh 快速搭建基础环境。建议优先保证一键安装脚本中的管道命令和环境激活命令行为符合预期,以降低首次编译 ops-math 的上手成本。