我需要运行的脚本中有一些命令,它是源代码的自定义 linter。每次运行都会生成一个报告,并在违反规则的情况下以退出代码 1 失败。我需要在失败之前运行所有命令以生成报告,如果任何命令失败且退出代码为非零,则失败。此脚本不起作用,因为它在第一个错误时存在:
lint ./module1/src/main/java && lint ./module2/src/main/java && lint module3/src/main/java
Run Code Online (Sandbox Code Playgroud)
现在我正在使用这个脚本:
lint ./module1/src/main/java
code1="$?"
lint ./module2/src/main/java
code2="$?"
lint ./module3/src/main/java
code3="$?"
if [[ "$code1" != "0" || "$code2" != "0" || "$code3" != "0" ]]; then
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
但它看起来过于复杂并且不可扩展(我需要添加额外的变量并检查下一个命令)。
有没有可能让这个脚本更优雅?
如果您希望完成所有测试,然后返回最终的总体状态代码,那么您必须对其进行编码。这是一种方法
#!/bin/bash
#
ss=0
lint ./module1/src/main/java || ((ss++))
lint ./module2/src/main/java || ((ss++))
lint ./module3/src/main/java || ((ss++))
exit $ss
Run Code Online (Sandbox Code Playgroud)
正如所写的那样,它失败了,退出代码与失败测试的数量相对应。您仍然可以测试真/假(零/非零),但如果您需要代码1
在任何一个或多个测试失败的情况下准确退出,请更改((ss++))
为ss=1
全盘。