将程序的输出日志传递给函数,同时将 return 代码存储在变量中
Pass output logs from a program into a function and store the return code in a variable at the same time
我有一个 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
获取 return 代码并将其存储在变量中。我怎样才能做到这一点而不失去 SomeProgram
进入我的 LogToFile
函数的日志功能。我尝试了以下选项但徒劳无功。
RETVAL=SomeProgram | LogToFile
RETVAL=(SomeProgram) | LogToFile
RETVAL=(SomeProgram | LogToFile)
是否可以将程序的输出传递给函数参数,同时将return值收集到另一个变量中?
我终于明白了。 PIPESTATUS是这里要用到的工具。
以下是我可以使用它来将 SomeProgram
的 return 代码转换为 RETVAL
的方法。
SomeProgram | LogToFile
RETVAL=${PIPESTATUS[0]}
以上是管道左边程序输出的获取方式。 PIPESTATUS
是一个数组,里面包含了所有运行与管道命令相邻的程序的return代码。
PIPESTATUS[1]
可以给出 LogToFile
的输出,例如,如果 LogToFile
是一个程序。
我有一个 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
获取 return 代码并将其存储在变量中。我怎样才能做到这一点而不失去 SomeProgram
进入我的 LogToFile
函数的日志功能。我尝试了以下选项但徒劳无功。
RETVAL=SomeProgram | LogToFile
RETVAL=(SomeProgram) | LogToFile
RETVAL=(SomeProgram | LogToFile)
是否可以将程序的输出传递给函数参数,同时将return值收集到另一个变量中?
我终于明白了。 PIPESTATUS是这里要用到的工具。
以下是我可以使用它来将 SomeProgram
的 return 代码转换为 RETVAL
的方法。
SomeProgram | LogToFile
RETVAL=${PIPESTATUS[0]}
以上是管道左边程序输出的获取方式。 PIPESTATUS
是一个数组,里面包含了所有运行与管道命令相邻的程序的return代码。
PIPESTATUS[1]
可以给出 LogToFile
的输出,例如,如果 LogToFile
是一个程序。