【发布时间】:2015-09-02 07:44:49
【问题描述】:
我做了一个简单的记录器,它有方法logMETHOD。它的工作是
- 将
stderr和stdout放入变量log(然后放入我的全局_LOG变量) - 在
stderr和stdout上打印stderr调用方法的stdout,以便我可以在控制台中看到它。 - 返回被调用函数的返回码。
它的调用如下所示:
logMETHOD myMethod arg1 arg2 arg3
我想出了如何将标准和错误输出同时输出到 log 变量和控制台,但我无法获得正确的返回码。
到目前为止我的代码:
function logMETHOD {
exec 5>&1
local log
log="$($1 ${@:2} 2>&1 | tee /dev/fd/5)"
local retVal=$?
_LOG+=$log$'\n'
return $retVal
}
不幸的是,我得到的返回码来自(可能)赋值(或者来自tee)。
额外问题:
如果没有2>&1 连接stdout 和stderr 也用于控制台,是否有可能实现我的目标?
我用 'PIPESTATUS' 测试了解决方案,但代码仍然是 0。
function main {
logMETHOD alwaysError
}
function logMETHOD {
exec 5>&1
local log
local retVal
log="$( "$@" 2>&1 | tee /dev/fd/5 )"
retVal=${PIPESTATUS[0]}
echo "RETVAL: $retVal"
echo "LOG: $log"
_LOG+=$log$'\n'
return $retVal
}
function alwaysError {
return 1
}
main $@
【问题讨论】: