我有一个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)
是否可以将程序的输出传递给函数参数并同时将返回值收集到另一个变量中?
答案 0 :(得分:2)
我终于明白了。 PIPESTATUS是在此处使用的工具。
以下是我可以使用它的方法,例如将SomeProgram
的返回码转换为RETVAL
。
SomeProgram | LogToFile
RETVAL=${PIPESTATUS[0]}
以上是在管道左侧获取程序输出的方法。 PIPESTATUS
是一个数组,其中包含与管道命令相邻运行的所有程序的返回代码。
PIPESTATUS[1]
是程序,则 LogToFile
可以给出LogToFile
的输出。