我有一个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)
是否可以将程序的输出传递给功能参数并同时将返回值收集到另一个变量中?
我终于想通了。PIPESTATUS是在此使用的工具。
以下是我可以用它来获取返回代码的方式SomeProgram
进入RETVAL
的例子。
SomeProgram | LogToFile
RETVAL=${PIPESTATUS[0]}
上面是在管道左侧获取程序输出的方法。PIPESTATUS
是一个数组,其中包含与管道命令相邻运行的所有程序的返回码。
PIPESTATUS[1]
可以给出LogToFile
例如LogToFile
程序的输出。