我有这个命令:
coverage report | tee >(grep TOTAL | awk '{exit (int($4) >= 75)?0:1}') && (exit ${PIPESTATUS[0]})
Run Code Online (Sandbox Code Playgroud)
报告代码覆盖率然后打印输出stdout并将相同的输出重定向到grep + awk,它基本上检查代码覆盖是否覆盖更少或更多75.最后,有exit一个子shell,我假装在我的CI/CD管道中使用.
问题是我的CI/CD总是成功完成,这不应该发生,因为我的测试中代码覆盖率低于75%.这意味着PIEPSTATUS我没有返回我期望它返回的内容(awk的exit代码).
问题出在哪儿?我究竟做错了什么?
我正在 Unix Bash 脚本中实现一个场景。我有两个脚本 ABC.bash 和 XYZ.bash。ABC.bash 中存在一种情况,即请求者未输入 Y 或 y 脚本退出并显示消息并且不再继续工作。ABC.bash 单独运行时工作正常。当我从另一个 bash 脚本(即 XYZ.bash)运行它时,就会出现问题。它不检查退出条件。XYZ.bash 中的逻辑语法。
echo "Calling ABC.bash from XYZ.bash"
ABC.bash $a $b | tee -a $LOGFILE; sleep 2
if [ ${PIPESTATUS[0]} = 0 ]
then
echo "Do some work"
else
echo "Check ABC.bash input"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
但是,当ABC.bash $a $b以状态 2 退出时,流程仍然进入 IF 块而不是 ELSE。在日志中,我可以看到消息DEBUGMODE 设置为 0。我需要这个 DEBUGMODE 设置,因为它是必需的,但希望在 ABC.bash 退出时退出。理想情况下,它应该转到 ELSE 部分,因为 ABC.bash 因用户输入错误而退出。
另外,我在 XYZ.bash 脚本中设置了 DEBUGMODE 选项。喜欢-
if [[ -z …Run Code Online (Sandbox Code Playgroud)