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

pre-commit hook执行脚本时终端不显示echo输出怎么办

问题根因

pre-commit 框架默认会捕获钩子脚本的标准输出(stdout)内容:

  • 钩子执行失败时,捕获的输出会随错误信息统一展示
  • 钩子执行成功时,捕获的stdout内容会被默认丢弃,不会输出到终端
    你脚本中echo打印的内容默认走stdout通道,钩子标记为Pass(执行成功)时自然看不到对应输出。
    另外你贴出的.pre-commit-config.yaml存在基础语法错误:根层级缺失repos:配置键,- repo: local条目没有对应的父级键,实际运行会触发配置解析报错,需要同步修正。
解决方法

两种方案按需选择即可:

方案1:开启钩子的verbose参数

在对应钩子的配置块中添加verbose: true,配置生效后即使钩子执行成功,pre-commit也会将脚本的stdout内容打印到终端。修正后的完整配置参考:

fail_fast: false
repos:
  - repo: local
    hooks:
    -   id: generate-build
        name: Generate build 
        entry: sh build_script.sh
        language: system
        always_run: true
        pass_filenames: false
        verbose: true

提示:钩子id字段不建议包含空格,避免后续单独调用钩子时出现解析异常。

方案2:将提示内容输出到标准错误流

pre-commit不会拦截标准错误(stderr)的输出,无论钩子执行成功或失败,写入stderr的内容都会直接打印到终端。这种方式不需要调整pre-commit配置,只需要修改脚本的输出重定向即可:

#! /bin/bash
echo "Stage 1: Preparing CMake configuration" >&2

如果只需要展示少量提示信息,优先选这个方案,不会因为开启verbose打印pre-commit框架本身的冗余日志。

修改完成后重新执行git commit -m "message",就能在终端看到预期的脚本输出内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:48:11