You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Bash编写Git钩子时grep结果赋值变量仅保留最后一行

问题成因
  • 回车符导致的行覆盖:pytest在非交互式运行环境(Git钩子执行时属于无TTY的非交互场景)下,为了实现动态进度刷新效果,会在每一行进度输出的末尾添加回车符\r(而非仅用换行符\n),作用是让光标回到当前行首,后续输出直接覆盖当前行内容。这些回车符会被完整保存到test_summary变量中,当你打印变量时,所有行都会从行首开始覆盖,最终视觉上只剩最后一行,前面行未被完全覆盖的末尾内容就会表现为乱码,你遇到的3%]就是第一行进度的残留内容。
  • 变量引用未加双引号:Bash中直接执行echo $test_summary时,Shell会自动拆分变量中的所有空白字符(包括换行、制表符),将换行替换为空格,也会导致原本的多行内容合并为单行展示。
解决方案
  1. 首先在管道中过滤掉所有回车符,避免行覆盖问题:
test_summary=$(pytest -v | tr -d '\r' | grep -E ".+\.py::.+[A-Z]+")

tr -d '\r'命令会删除输出流中所有的回车符,仅保留标准换行符。
2. 打印变量时必须添加双引号,保留原始换行格式:

echo "$test_summary"
  1. (可选)如果仍存在输出异常,可以强制pytest禁用动态进度输出,添加参数调整输出格式:
test_summary=$(pytest -v --no-progress | tr -d '\r' | grep -E ".+\.py::.+[A-Z]+")

内容的提问来源于stack exchange,提问作者user32882

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:15:02