我有一个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程序的输出。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。