运行命令集并返回错误代码(如果有任何失败)

Smx*_*Cde 0 bash shell scripting continuous-integration automation

在nodejs项目中,我有一个yarn lint以这种方式运行几个短接的快捷方式:

lint_1 && lint_2 && lint_3
Run Code Online (Sandbox Code Playgroud)

如果其中任何一个发现错误,则返回错误代码,因此结果yarn lint本身会返回错误代码,因此构建失败.

虽然存在一个小问题,但它可以正常工作,捕获所有错误:如果一个linter失败并显示错误代码 - 其余的linters将不会被执行.

我想要的 - 执行所有这些(所以他们都打印所有错误),然后才失败.

我知道我可以创建一个bash脚本(我将运行yarn lint),逐个运行每个linters收集返回码,然后检查是否有任何代码非零 - exit 1并且它将失败yarn lint.但我想知道有更优雅的方式吗?

tha*_*guy 5

你可以陷阱ERR并设置一个标志.如果其中任何一个失败,这将运行每个短节并退出失败:

#!/bin/bash
result=0
trap 'result=1' ERR
lint_1
lint_2
lint_3
exit "$result"         
Run Code Online (Sandbox Code Playgroud)

  • `trap ... ERR` 在这里的意思是“在命令以非零状态退出时运行(带有 `set -e` 的所有警告)”。`result=1` 是要在此事件上执行的常规变量赋值 (2认同)