Turbo Prune后Lint命令经Sed管道丢失退出码问题求助
解决Turbo Prune后Lint检查退出码被Sed覆盖的问题
问题根源
Shell管道命令默认只会返回最后一个命令的退出码。你用turbo run lint | sed 's/out\///g'时,哪怕turbo run lint因为Lint错误返回退出码1,只要sed执行成功(退出码0),整个命令的最终退出码就会被覆盖为0,导致GitHub Actions误判Lint检查通过。
解决方案
方案1:开启pipefail选项
在执行管道命令前开启set -o pipefail,这个Shell选项会让管道的退出码等于第一个失败命令的退出码,直接解决退出码被覆盖的问题。
具体命令示例:
set -o pipefail && turbo run lint | sed 's/out\///g'
在GitHub Actions的Step中可以这样写:
- name: Run Lint run: | set -o pipefail turbo run lint | sed 's/out\///g'
方案2:手动捕获并返回原退出码
如果不想修改Shell选项,可以拆分步骤,先单独执行Turbo命令并保存退出码,再处理输出,最后返回原退出码:
# 执行Lint并保存输出结果 turbo run lint > lint_output.txt # 捕获Turbo的原始退出码 TURBO_EXIT_CODE=$? # 处理输出并打印 sed 's/out\///g' lint_output.txt # 返回Turbo的退出码,让Actions识别检查结果 exit $TURBO_EXIT_CODE
注意事项
修正你的Sed替换规则:原命令s//out//g是错误的,需根据实际输出路径调整。比如Lint输出路径为out/src/components/Button.js,要替换成src/components/Button.js,就用s/out\///g;如果路径是./out/xxx,则用s/\.\/out\///g。
内容的提问来源于stack exchange,提问作者JLarky
相关产品推荐
相关产品推荐

