已关闭
nvme-cli的bash补全脚本使用“typeset”-‘readonly’两行式写法,在bash5.1函数内加载时触发语法错误,导致nvme命令tab补全失效 #15
still_water创建于  25 天前关闭于  12 天前
still_water
still_water
25 天前 创建

【缺陷描述】:请补充详细的缺陷问题现象描述

nvme-cli 提供的 bash 补全脚本 /usr/share/bash-completion/completions/nvme 在定义两个关联数组时使用了"先 typeset -A 声明、再 readonly arr=(...) 赋值"的两行式写法(第 10-11 行 _plugin_subcmds、第 60-61 行 _plugin_funcs):

    10  typeset -A _plugin_subcmds
    11  readonly _plugin_subcmds=( 
    ...
    60  typeset -A _plugin_funcs
    61  readonly _plugin_funcs=(

该写法触发 bash 5.1.x 的一处变量属性处理缺陷:在函数内执行时,readonly arr=(...) 重建变量会丢失先前置入的 -A 关联数组属性,数组被重建为普通标量,复合赋值中的字符串下标(如 [intel])被按算术表达式解析,产生致命错误:

/usr/share/bash-completion/completions/nvme:行57: 'intel':语法错误: 需要操作数 (错误符号是 "'intel'")

bash-completion 的动态加载器 _completion_loader 就是在函数内 source 补全脚本,且用 &>/dev/null 静默了错误输出。因此用户输入 nvme 按 Tab 时:source 中止 → 补全注册语句 complete -o default -F _nvme_subcmds nvme 未执行 → readline 丢弃当前输入行并刷新出空提示符。

修复本脚本即可规避:将两行式合并为单行 readonly -A arr=(...)即可解决,不需升级bash。

一、缺陷信息

项目 内容
软件包 nvme-cli(nvme-cli-1.16-2.oe2203sp4.x86_64
缺陷文件 /usr/share/bash-completion/completions/nvme(共 1404 行)
缺陷位置 第 10-11 行(_plugin_subcmds)、第 60-61 行(_plugin_funcs
触发环境 bash 5.1.x(实测 5.1.8bash-5.1.8-16.oe2203sp4)+ bash-completion 2.11
架构 与架构无关
缺陷类型 脚本写法触发 bash 5.1 缺陷(bash 侧上游 5.2 已修复,见 CHANGES 5.2-alpha 条目 kk)
上游 nvme-cli 状态 nvme-cli 2.x 已重写补全脚本,不再使用该写法;本 issue 针对 1.x 维护分支

【缺陷所属的os版本】

NAME="openEuler"
VERSION="22.03 (LTS-SP4)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP4)"
ANSI_COLOR="0;31"

【内核版本】

内核无关

【缺陷所属软件及版本号】

nvme-cli-1.16-2.oe2203sp4.x86_64

【环境信息】

硬件信息--硬件无关

  • 提供跟硬件相关的信息,如架构、cpu和内存规格等
  • 虚拟机场景,额外补充宿主机os版本类型

软件信息

  • 跟缺陷所属软件相关的其它软件版本信息(如软件包构建失败由gcc引起,请填写gcc的版本号)

rpm -qi bash

Name : bash
Version : 5.1.8
Release : 16.oe2203sp4
Architecture: x86_64
Install Date: Wed 24 Jul 2024 09:22:22 AM CST
Group : Unspecified
Size : 6366490
License : GPLv3
Signature : RSA/SHA256, Tue 25 Jun 2024 03:11:18 PM CST, Key ID 3b477c60b675600b
Source RPM : bash-5.1.8-16.oe2203sp4.src.rpm
Build Date : Tue 25 Jun 2024 03:08:41 PM CST
Build Host : dc-64g.compass-ci
Packager : http://openeuler.org
URL : https://www.gnu.org/software/bash
Summary : It is the Bourne Again Shell
Description :
Bash is the GNU Project's shell. Bash is the Bourne Again SHell. Bash is an sh-compatible
shell that incorporates useful features from the Korn shell (ksh) and C shell (csh). It is
intended to conform to the IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools standard. It offers
functional improvements over sh for both programming and interactive use. In addition, most
sh scripts can be run by Bash without modification.

rpm -qi nvme-cli

Name : nvme-cli
Version : 1.16
Release : 2.oe2203sp4
Architecture: x86_64
Install Date: Tue 18 Aug 2026 07:17:06 PM CST
Group : Unspecified
Size : 827333
License : GPLv2+
Signature : RSA/SHA256, Sat 22 Jun 2024 11:17:49 PM CST, Key ID 3b477c60b675600b
Source RPM : nvme-cli-1.16-2.oe2203sp4.src.rpm
Build Date : Sat 22 Jun 2024 11:17:43 PM CST
Build Host : dc-64g.compass-ci
Packager : http://openeuler.org
URL : https://github.com/linux-nvme/nvme-cli
Summary : NVMe management command line interface
Description :
nvme-cli provides NVM-Express user space tooling for Linux.

网络信息 --不涉及组网

  • 如果有特殊组网,请提供网络拓扑信息以及网络数据走向

【问题复现步骤】

  1. 安装nvme-cli
    yum install nvme-cli

  2. bash输入“nvme ”,按tab
    [root@W09386I w]# nvme [root@W09386I w]#

并未联想到补全内容,而是打印新的命令行提示符

【实际结果】

nvme命令不可通过tab补全,不可通过tabtab输出候选

【期望结果】

nvme +tab可以正常补全,tabtab可以列出候选子命令或选项

【其他相关附件信息】

【缺陷详情及分析指导参考链接】

二、缺陷分析结构反馈
影响性分析说明:
命令行补全及候选子命令的提示功能不可用
缺陷严重等级:(Critical/High/Moderate/Low)
Low
缺陷根因说明:
bash5.的缺陷导致的,当前nvme-cli的补全脚本的写法会触发该缺陷
受影响版本排查(受影响/不受影响):
openEuler-20.03-LTS-SP4:不受影响
openEuler-22.03-LTS-SP3:受影响
openEuler-22.03-LTS-SP4:受影响
openEuler-24.03-LTS:不受影响
openEuler-24.03-LTS-SP1:不受影响
openEuler-24.03-LTS-SP2:不受影响
修复是否涉及abi变化(是/否):
openEuler-22.03-LTS-SP3:否
openEuler-22.03-LTS-SP4:否

likedislike
openeuler-ci-botopeneuler-ci-bot成员
25 天前 将 liuzhiqiang26 设为负责人
openeuler-ci-botopeneuler-ci-bot成员
25 天前 修改了issue 的描述
openeuler-ci-botopeneuler-ci-bot成员
25 天前 添加了label:sig/System-tool
openeuler-ci-bot
openeuler-ci-bot成员
25 天前 评论:

Welcome To openEuler Community

Hey @flyingcs110 , thanks for your contribution to the community.

Bot Usage Manual

I'm the Bot here serving you. You can find the instructions on how to interact with me at Here . That means you can comment below every pull request or issue to trigger Bot Commands.

Contact Guide

If you have any questions, please contact the SIG: System-tool ,
and any of the maintainers: @Charlie_li1, @lostway1, @zhuchunyi ,
and any of the committers: @liuzhiqiang26 .

likedislike
openeuler-ci-bot
openeuler-ci-bot成员
25 天前 评论:

以下的要求不是强制性的, 未按模板评论时对issue无任何影响
issue处理注意事项:
1. 当前issue受影响的分支提交pr时, 须在pr描述中填写当前issue编号进行关联, 否则无法关闭当前issue;
2. 模板内容需要填写完整, 无论是受影响或者不受影响都需要填写完整内容,未引入的分支不需要填写, 否则无法关闭当前issue;
3. 以下为模板中需要填写完整的内容, 请复制到评论区回复, 注: 内容的标题名称(影响性分析说明, 缺陷严重等级, 受影响版本排查(受影响/不受影响), 修复是否涉及abi变化(是/否))不能省略,省略后defect-manager将无法正常解析填写内容.
评论区可能使用到的指令说明:

指令 指令说明 使用权限
/check-issue 触发defect-manager校验 不限
/reason xxx /reason +挂起或取消条件 不限

影响性分析说明:

缺陷严重等级:(Critical/High/Moderate/Low)

缺陷根因说明:

受影响版本排查(受影响/不受影响):

  1. openEuler-20.03-LTS-SP4:
  2. openEuler-22.03-LTS-SP3:
  3. openEuler-22.03-LTS-SP4:
  4. openEuler-24.03-LTS:
  5. openEuler-24.03-LTS-SP1:
  6. openEuler-24.03-LTS-SP2:

abi变化(是/否):

  1. openEuler-20.03-LTS-SP4:
  2. openEuler-22.03-LTS-SP3:
  3. openEuler-22.03-LTS-SP4:
  4. openEuler-24.03-LTS:
  5. openEuler-24.03-LTS-SP1:
  6. openEuler-24.03-LTS-SP2:

缺陷issue处理具体操作请参考:
https://atomgit.com/openeuler/cve-manager/blob/master/cve-vulner-manager/doc/md/defect-manager-manual.md
pr关联issue具体操作请参考:
https://docs.atomgit.com/docs/help/home/org_project/pullrequests/pr-related-issue

likedislike
openeuler-ci-botopeneuler-ci-bot成员
25 天前 添加了label:DEFECT/UNFIXED
still_waterstill_water
25 天前 关联了pull request:Fix bash completion failure on bash 5.1
still_water
still_water
25 天前 评论:

【缺陷详情及分析指导参考链接】
二、缺陷分析结构反馈
影响性分析说明:

缺陷严重等级:(Critical/High/Moderate/Low)

缺陷根因说明:

受影响版本排查(受影响/不受影响):
openEuler-20.03-LTS-SP4:待评估
openEuler-22.03-LTS-SP3:受影响
openEuler-22.03-LTS-SP4:受影响
openEuler-24.03-LTS: 不受影响
openEuler-24.03-LTS-SP1:不受影响
openEuler-24.03-LTS-SP2:不受影响

修复是否涉及abi变化(是/否):
openEuler-20.03-LTS-SP4:否
openEuler-22.03-LTS-SP3:否
openEuler-22.03-LTS-SP4:否
openEuler-24.03-LTS:无
openEuler-24.03-LTS-SP1:无
openEuler-24.03-LTS-SP2:无

likedislike
openeuler-ci-bot
openeuler-ci-bot成员
25 天前 评论:

@flyingcs110 影响性分析说明=>不允许为空. 缺陷根因说明=>不允许为空. 缺陷严重等级=>没有按正确格式填写

likedislike
still_water
still_water
25 天前 评论:

【缺陷详情及分析指导参考链接】
二、缺陷分析结构反馈
影响性分析说明: 命令行补全及候选子命令的提示功能不可用

缺陷严重等级:(Critical/High/Moderate/Low)
Low

缺陷根因说明: bash5.的缺陷导致的,当前nvme-cli的补全脚本的写法会触发该缺陷

受影响版本排查(受影响/不受影响):
openEuler-20.03-LTS-SP4:不受影响
openEuler-22.03-LTS-SP3:受影响
openEuler-22.03-LTS-SP4:受影响
openEuler-24.03-LTS: 不受影响
openEuler-24.03-LTS-SP1:不受影响
openEuler-24.03-LTS-SP2:不受影响

修复是否涉及abi变化(是/否):
openEuler-20.03-LTS-SP4:不涉及
openEuler-22.03-LTS-SP3:否
openEuler-22.03-LTS-SP4:否
openEuler-24.03-LTS:不涉及
openEuler-24.03-LTS-SP1:不涉及
openEuler-24.03-LTS-SP2:不涉及

likedislike
openeuler-ci-bot
openeuler-ci-bot成员
25 天前 评论:

@flyingcs110 缺陷严重等级=>没有按正确格式填写

likedislike
openeuler-ci-bot
openeuler-ci-bot成员
25 天前 评论:

@flyingcs110 缺陷严重等级=>没有按正确格式填写

likedislike
openeuler-ci-botopeneuler-ci-bot成员
25 天前 修改了issue 的描述
openeuler-ci-bot
openeuler-ci-bot成员
25 天前 评论:

@liuzhiqiang26 经过defect-manager解析,已分析的内容如下表所示:

状态 需分析 内容
已分析 1.影响性分析说明 命令行补全及候选子命令的提示功能不可用
已分析 2.缺陷严重等级 Low
已分析 3.缺陷根因定位 bash5.的缺陷导致的,当前nvme-cli的补全脚本的写法会触发该缺陷
已分析 4.受影响版本排查 openEuler-20.03-LTS-SP4:不受影响,openEuler-22.03-LTS-SP3:受影响,openEuler-22.03-LTS-SP4:受影响,openEuler-24.03-LTS:不受影响,openEuler-24.03-LTS-SP1:不受影响,openEuler-24.03-LTS-SP2:不受影响
已分析 5.abi变化 openEuler-22.03-LTS-SP3:否,openEuler-22.03-LTS-SP4:否

请确认分析内容的准确性,确认无误后,您可以进行后续步骤,否则您可以继续分析

likedislike
openeuler-ci-botopeneuler-ci-bot成员
12 天前 关闭了 issue
openeuler-ci-botopeneuler-ci-bot成员
12 天前 issue状态由 待办的 改变为 已完成
openeuler-ci-botopeneuler-ci-bot成员
12 天前 issue状态由 已完成 改变为 待办的
openeuler-ci-botopeneuler-ci-bot成员
12 天前 重新打开了 issue
openeuler-ci-bot
openeuler-ci-bot成员
12 天前 评论:

@liuzhiqiang26
关闭issue前,需要将受影响的分支在合并pr时关联上当前issue编号: #15
受影响分支: openEuler-22.03-LTS-SP3
具体操作参考: https://docs.atomgit.com/docs/help/home/org_project/pullrequests/pr-related-issue

likedislike
openeuler-ci-botopeneuler-ci-bot成员
12 天前 关联了pull request:[sync] PR-35: Fix bash completion failure on bash 5.1
openeuler-ci-botopeneuler-ci-bot成员
12 天前 关闭了 issue
openeuler-ci-botopeneuler-ci-bot成员
12 天前 issue状态由 待办的 改变为 已完成
openeuler-ci-botopeneuler-ci-bot成员
12 天前 添加了label:DEFECT/FIXED;删除了label:DEFECT/UNFIXED,sig/System-tool