gpt4 book ai didi

java - Linux shell 中一个程序同时过滤输出和获取退出码

转载 作者:太空狗 更新时间:2023-10-29 11:09:21 24 4
gpt4 key购买 nike

我在 Jenkins(Jenkins 是一个开源的持续集成工具)中通过执行一系列 shell 命令来运行一个作业。其中一个命令是运行一个执行某些数据验证的 Java 程序。如果遇到无效日期,Java 程序将以非零退出代码退出,以便 Jenkins 可以发现这次构建失败。

不幸的是,Java 程序向 stdout 和 stderr 打印了太多日志,其中只有少数有用。由于无法修改 Java 程序,我决定使用 grep 过滤输出。所以我把 shell 写成:

java -cp $CLASSPATH MetaValidatorMain | grep -v "useless keyword1"| grep -v "useless keyword2"

但问题是,在 shell 行执行后,父进程(Jenkins)得到了 grep 的退出代码而不是 java,所以 Jenkins无法确定构建是否成功。

我也试过这个:

(java -cp $CLASSPATH MetaValidatorMain || exit 1) | grep -v "useless keyword1"| grep -v "useless keyword2"

也没有用。

谁能告诉我如何编写 shell 行来过滤输出并同时获得正确的退出代码。

谢谢

最佳答案

有点绕,但你可以将程序输出重定向到一个文件,捕获返回,然后 grep 输出文件以获取你想要的内容:

java -cp $CLASSPATH MetaValidatorMain > /tmp/outfile.txt 2>&1
RETURN_CODE=$?
grep -v "useless keyword1" /tmp/outfile | grep -v "useless keyword2"
exit RETURN_CODE

关于java - Linux shell 中一个程序同时过滤输出和获取退出码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21110181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com