将程序中的输出日志传递到函数中,并将返回代码同时存储在变量中

时间:2019-07-03 14:13:12

标签: linux bash shell sh embedded-linux

我有一个Shell脚本,该脚本具有Log语句的功能。 SomeProgram是另一个程序,它是从我的shell脚本运行的,并且日志中的日志被传递到函数LogToFile中。

#!/bin/sh

LogToFile() {
    [[ ! -t 0 ]] && while read line; do echo "$line" >> $MY_LOG_FILE; done
    for arg; do echo "$arg" >> $MY_LOG_FILE; done
}

SomeProgram | LogToFile

问题:
一切都很好,直到这里。但是我一直在尝试从SomeProgram获取返回码并将其存储在变量中。我该怎么做,而又不会失去SomeProgram的日志功能,而不会丢失LogToFile的功能。我尝试了以下选项,但没有成功。

RETVAL=SomeProgram | LogToFile
RETVAL=(SomeProgram) | LogToFile
RETVAL=(SomeProgram | LogToFile)

是否可以将程序的输出传递给函数参数并同时将返回值收集到另一个变量中?

1 个答案:

答案 0 :(得分:2)

我终于明白了。 PIPESTATUS是在此处使用的工具。

以下是我可以使用它的方法,例如将SomeProgram的返回码转换为RETVAL

SomeProgram | LogToFile
RETVAL=${PIPESTATUS[0]}

以上是在管道左侧获取程序输出的方法。 PIPESTATUS是一个数组,其中包含与管道命令相邻运行的所有程序的返回代码。

例如,如果PIPESTATUS[1]是程序,则

LogToFile可以给出LogToFile的输出。