在我需要运行的脚本中有一些命令,它是源代码的自定义链接。每次运行都会生成一个报告,如果违反规则,退出代码1就会失败。我需要在失败之前运行所有命令来生成报告,如果任何命令在非零退出代码中失败,则失败。此脚本无法工作,因为它存在于第一个错误上:
lint ./module1/src/main/java && lint ./module2/src/main/java && lint module3/src/main/java现在我正在使用这个脚本:
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但是它看起来太复杂了,而且是不可扩展的(我需要添加额外的变量并检查下一个命令)。
有可能让这个脚本更优雅吗?
发布于 2020-07-06 08:50:57
如果您希望完成所有测试,然后返回最终的总体状态代码,则必须这样编写它。有一种方法
#!/bin/bash
#
ss=0
lint ./module1/src/main/java || ((ss++))
lint ./module2/src/main/java || ((ss++))
lint ./module3/src/main/java || ((ss++))
exit $ss正如所写的那样,它失败了,退出代码对应于失败测试的数量。您仍然可以测试true/false (零/非零),但是如果您要求在任何一个或多个测试失败时使用精确的1退出代码,则始终将((ss++))更改为ss=1。
发布于 2021-09-18 01:08:19
这有点麻烦,但您可以为此目的使用xargs。默认情况下,它运行所有命令,如果其中任何命令失败,则退出状态123。
在这里,我们运行三个命令,所有命令都失败了,但所有命令都被执行:
echo '
echo 1 && exit 1
echo 2 && exit 1
echo 3 && exit 1
' | xargs -d "\n" -L1 -I{} bash -c {}退出状态为123 (GNU xargs),但输出如下,显示所有三个命令都已运行:
1
2
3一组类似的命令,它们都在状态0的情况下成功退出:
echo '
echo 1 && exit 0
echo 2 && exit 0
echo 3 && exit 0
' | xargs -L1 -I{} bash -c {}这里的退出状态为0,正如您所预期的那样。
https://unix.stackexchange.com/questions/596959
复制相似问题