【问题标题】:bash get an exit code from a subshell and pipe [duplicate]bash从子shell和管道中获取退出代码[重复]
【发布时间】:2014-03-18 11:13:03
【问题描述】:

我有以下 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)因为 subshel​​l 和/或管道。

我需要 java_debug 返回与 java 执行相同的退出代码

如何修复这个脚本?

注意:我可以使用script命令代替2>&1 | tee,但不幸的是脚本命令在不同系统中的执行会发生变化(redhat中的脚本参数与OSX中的脚本参数不一样)。

注意:我知道 bash 是一种可怕的语言,不应该使用它;但在这种情况下我别无选择。

【问题讨论】:

  • bash 在用于其预期目的时是一种很好的语言。

标签: bash


【解决方案1】:

在这里找到答案: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]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2016-09-04
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多