我的shell脚本需要获取结果(退出状态)并捕获Java应用程序的日志输出,该Java应用程序将日志输出写入其标准输出和标准错误区域。
要获取Java应用程序的状态代码,我可以这样做:
RESULT=$(java <My app>)
要获取其输出流,我可以这样做:
$java <My app> >> Mylog.txt 2>&1 || true;
但是我找不到一种兼具两者的方法。
您可以使用该tee
命令将输出追加并继续写入stdout:
RESULT_STDOUT=$($java classname | tee -a Mylog.txt)
在这里,-a
如果可能的话,请发球台附加到Mylog.txt。
我不确定您为什么需要true
那里,所以我将其排除在外。这里的主要问题是如何保存错误日志。如果这样做2>&1
,它将成为Mylog.txt的一部分,也将成为结果的一部分。如果将错误日志存储在单独的文件中足以满足您的需要,则可以使用以下命令将其重定向
RESULT_STDOUT=$($java classname 2>> Mylog.error.txt | tee -a Mylog.txt)
编辑:退出状态可以通过$PIPESTATUS
@Raedwald指出:管道输出并捕获Bash中的退出状态。上面的解决方案RESULT_STDOUT
仅捕获标准输出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句