温馨提示:本文翻译自stackoverflow.com,查看原文请点击:linux - Pass output logs from a program into a function and store the return code in a variable at the same
bash linux shell sh embedded-linux

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

发布于 2020-03-27 11:30:44

我有一个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)

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

查看更多

查看更多

提问者
AdeleGoldberg
被浏览
215
AdeleGoldberg 2019-07-04 15:30

我终于想通了。PIPESTATUS是在此使用的工具。

以下是我可以用它来获取返回代码的方式SomeProgram进入RETVAL的例子。

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

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

PIPESTATUS[1]可以给出LogToFile例如LogToFile程序的输出