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