3 回答

TA贡献1951条经验 获得超3个赞
在您的shell中复制&1(在我的示例中为5),在子shell中使用&5(这样您将写入父shell的stdout(&1)):
exec 5>&1
FF=$(echo aaa|tee >(cat - >&5))
echo $FF
将打印aaa两次,一次是由于子外壳中的回显,而第二次将打印变量的值。
在您的代码中:
exec 5>&1
VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee >(cat - >&5))
# use the value of VAR1

TA贡献1856条经验 获得超11个赞
Op De Cirkel的答案具有正确的想法。可以进一步简化(避免使用cat):
exec 5>&1
FF=$(echo aaa|tee /dev/fd/5)
echo $FF

TA贡献1874条经验 获得超12个赞
这是捕获stderr命令和出口代码的示例。这是基于罗素·戴维斯(Russell Davis)的答案。
exec 5>&1
FF=$(ls /taco/ 2>&1 |tee /dev/fd/5; exit ${PIPESTATUS[0]})
exit_code=$?
echo "$FF"
echo "Exit Code: $exit_code"
如果该文件夹/taco/存在,它将捕获其内容。如果该文件夹不存在,它将捕获一条错误消息,并且退出代码为2。
如果省略,2>&1则只会stdout被捕获。
- 3 回答
- 0 关注
- 924 浏览
添加回答
举报