我有以下bash脚本java_debug
来记录所有java执行(标准和错误控制台):
#! /bin/bash
echo param1: $1
echo param2: $2
(java HelloWorld "$@" 2>&1 ) | tee /tmp/log.txt
我跑了:
$ java_debug v1 "v2 with space"
param1: v1
param2: v2 wirh space
Error: Could not find or load main class HelloWorld
$ echo $?
0
在这个例子中,java找不到HelloWorld类,因此它显示错误。 但是,错误在$?中丢失了? (因为子壳和/或管道,我们得到0而不是1)。
我需要java_debug返回与java执行
相同的退出代码如何修复此脚本?
注意:我可以使用script
命令而不是2>&1 | tee
,但不幸的是脚本命令的实现在不同的系统中发生了变化(redhat中的脚本参数与OSX中的不同)。
注意:我知道bash是一种可怕的语言,不应该使用它;但在这种情况下我别无选择。
答案 0 :(得分:4)
在这里找到答案:Get exit code from subshell through the pipes
就我而言:
#! /bin/bash
echo param1: $1
echo param2: $2
(java HelloWorld "$@" 2>&1 ) | tee /tmp/log.txt
exit ${PIPESTATUS[0]}