我有一个shell脚本,它有一个记录语句的函数。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)

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

最佳答案

我终于明白了。PIPESTATUS是这里使用的工具。
下面是使用它将SomeProgram的返回代码转换成RETVAL的方法。

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

上面是获取管道左侧程序输出的方法。PIPESTATUS是一个数组,它包含与pipe命令相邻运行的所有程序的返回代码。
PIPESTATUS[1]可以给出LogToFile的输出,例如,如果LogToFile是一个程序。

关于linux - 将程序的输出日志传递到函数中,并将返回代码同时存储在变量中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56872065/

10-14 15:40
查看更多