该程序:
function import {
set -x
# read NAME < <(/usr/bin/pwd)
NAME=$(/usr/bin/pwd)
echo 123 >&2
set +x
}
echo aaaaaaaaaaa
import
echo bbbbbbbbbbb
OUT=$( import 2>&1 )
echo "$OUT"
echo ccccccccccc
我希望'aaa'和'bbb'之间的输出与'bbb'和'ccc'之间的输出相同。但 ksh 的情况并非如此:
aaaaaaaaaaa
+ /usr/bin/pwd
+ NAME=/home/neuron
+ echo 123
+ 1>& 2
123
bbbbbbbbbbb
+ /usr/bin/pwd
ccccccccccc
如果我将 $( ... ) 更改为 < <(...),stderr 将照常工作,并且我有相同的输出。我在 solaris 和 linux 上试过了,它的行为是一样的,所以我猜这不是 ksh 错误。请注意,不仅“set -x”被禁用,“echo 123 1>&2”输出也消失了。在 bash 中,代码按我的设想工作。
我的问题是“为什么”和“如何捕获函数的标准输出和标准错误?”
谢谢
弗拉德