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
相关产品推荐
相关产品推荐

