开发者社区> 问答> 正文

将程序的输出日志传递到函数中,并将返回代码同时存储在变量中

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

是否可以将程序的输出传递给功能参数并同时将返回值收集到另一个变量中?

展开
收起
祖安文状元 2020-01-06 15:22:57 525 0
1 条回答
写回答
取消 提交回答
  • 我终于想通了。PIPESTATUS是在此使用的工具。

    以下是我可以用它来获取返回代码的方式SomeProgram进入RETVAL的例子。

    SomeProgram | LogToFile
    RETVAL=${PIPESTATUS[0]}
    
    

    上面是在管道左侧获取程序输出的方法。PIPESTATUS是一个数组,其中包含与管道命令相邻运行的所有程序的返回码。

    PIPESTATUS[1]可以给出LogToFile例如LogToFile程序的输出。

    2020-01-06 15:23:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载