Bash连续执行相同命令时history漏记单条命令问题咨询
结论1:连续重复命令漏记是Bash历史的默认预期行为
这完全是Bash历史模块的标准逻辑,和你用的at命令没有关系,核心控制参数是HISTCONTROL环境变量:
- 绝大多数Linux发行版的默认Bash配置中,
HISTCONTROL会被设置为ignoreboth,这个值是两个规则的简写:ignorespace:开头带前置空格的命令不写入历史,对应你平时用前置空格执行查询命令不会被记录的现象ignoredups:连续执行的完全相同的命令,仅第一条会被写入历史,后续紧邻的重复命令直接被忽略,和你观测到的“仅漏记连续重复的1条pomo,中间执行过其他命令后再跑pomo就会正常记录”的现象完全吻合
- 如果需要调整这个规则,你可以修改bash配置文件(
~/.bashrc或~/.bash_profile)中的HISTCONTROL赋值:- 只保留忽略前置空格的规则、关闭连续重复去重:
export HISTCONTROL=ignorespace - 关闭所有历史过滤规则,所有执行过的命令都记录:
export HISTCONTROL=""
- 只保留忽略前置空格的规则、关闭连续重复去重:
结论2:at的/bin/sh警告和历史漏记无关
at命令输出的commands will be executed using /bin/sh只是个提示信息,说明你提交到at队列的定时任务会调用/bin/sh解释执行,这个逻辑完全在at自己的进程内运行,不会修改你当前交互Bash的任何配置,更不可能影响历史记录逻辑。你复现时atq查不到任务是独立的其他问题,和本次历史记录漏记没有关联。
快速自验证方法
你可以直接在当前终端执行以下命令复现这个逻辑,不需要依赖pomo别名:
# 查看当前生效的HISTCONTROL配置 echo $HISTCONTROL # 连续执行两次完全相同的测试命令 echo test_duplicate_history echo test_duplicate_history # 查看最近5条历史,会发现仅第一条测试命令被记录 history | tail -n 5
执行后你就能看到和之前pomo命令完全一致的漏记现象,直接验证规则逻辑。
内容的提问来源于stack exchange,提问作者Michele Ancis
相关产品推荐
相关产品推荐

