如何在shell脚本中获取Java应用程序的退出状态、标准输出和标准错误流?
我的shell脚本需要获取结果(退出状态)并捕获Java应用程序的日志输出,该应用程序会写入其标准输出和标准错误列表
要获取Java应用程序的状态代码,我可以执行以下操作:
RESULT=$(java <My app>)
要获取其输出流,我可以执行以下操作:
$java <My app> >> Mylog.txt 2>&1 || true;
但我找不到一种方法同时得到这两个
你可以在下面搜索框中键入要查询的问题!
我的shell脚本需要获取结果(退出状态)并捕获Java应用程序的日志输出,该应用程序会写入其标准输出和标准错误列表
要获取Java应用程序的状态代码,我可以执行以下操作:
RESULT=$(java <My app>)
要获取其输出流,我可以执行以下操作:
$java <My app> >> Mylog.txt 2>&1 || true;
但我找不到一种方法同时得到这两个
# 1 楼答案
最近运行的程序的退出状态在变量
$?
中可用。因此,您可以这样做:# 2 楼答案
您可以使用
tee
命令追加输出并继续写入stdout:这里,
-a
要求tee附加到Mylog。txt,如果可能的话我不确定你为什么需要那里的
true
,所以我排除了这个。这里的主要问题是如何保存错误日志。如果您这样做2>&1
,它将成为Mylog的一部分。txt,但也有结果。如果将错误日志存储在单独的文件中就足够了,可以使用编辑: 您可以通过
$PIPESTATUS
获得退出状态,正如@Raedwald指出的:Pipe output and capture exit status in Bash。上述解决方案仅将stdout捕获为RESULT_STDOUT
# 3 楼答案
标准unix方式的最佳解决方案是重定向stderr和/或stdout文件描述符:
在调用之前重定向stderr,捕获结果并尽快恢复:
例如: