5

挣扎了一个小时...... java代码:

ULogger.info("throwing out 666!");
System.exit(666);

bash 包装器:

eval ${COMMAND_TO_RUN}
ret_code=$?
printf "error code : [%d]" ${ret_code}

输出:

[2012-11-30 15:20:12,971][INFO ] throwing out 666!
error code : [0]

这是怎么回事?谢谢...

[编辑]

${COMMAND_TO_RUN}是_

((java -Xmx9000m -Dtoday_nix=20121128 -cp "/usr/lib/hadoop/conf" com.paypal.risk.ars.linking.task_fw.BaseRunnableProcess 3>&1 1>&2 2>&3) | tee /dev/tty) > batches_errors.log
4

2 回答 2

6

你的问题出在你的COMMAND_TO_RUN

((java -Xmx9000m -Dtoday_nix=20121128 -cp "/usr/lib/hadoop/conf" com.paypal.risk.ars.linking.task_fw.BaseRunnableProcess 3>&1 1>&2 2>&3) | tee /dev/tty) > batches_errors.log

最后调用的程序是tee,它将以状态退出0,覆盖退出值java

您可以使用$PIPESTATUS,它是管道中的返回值数组。

例如:

$ cat nonexistantFile | echo ; echo "e: $? p: ${PIPESTATUS[@]}"

预期输出:

e: 0 p: 1 0

cat将失败(退出代码 1),回显将成功(退出代码 0)。$?0${PIPESTATUS[0]}将包含 ( ) 的退出代码cat1echo ${PIPESTATUS[1]}( 0) 的退出代码。

于 2012-12-01T01:19:57.790 回答
-2

这是因为 $? 几乎可以肯定会给你返回码eval,在这里成功。你为什么把eval电话包括在内?只需调用COMMAND_TO_RUN

于 2012-11-30T23:49:42.727 回答