将stderr从mbuffer变为变量

时间:2013-04-12 17:20:25

标签: linux bash variables stdout stderr

mbuffer在接收方完成时,它会打印时间和速度,我想进入$time$speed

尝试实施this回答

#!/bin/bash
exec 3>&1 4>&2 #set up extra file descriptors
error=$( { mbuffer -v 0 -4 -s 128k -m 1G -I 8023 3>&1 4>&2 > /tank3/fs5/tst; } )
exec 3>&- 4>&- # release the extra file descriptors
echo "The message is \"${error}\""

执行此操作并在另一个终端中

echo secret | mbuffer -4 -s 128k -m 1G -O localhost:8023

我得到了

# ./fff 

summary:  0.0 KiByte in  0.1 sec - average of  0.0 KiB/s
The message is ""
secret

我希望在""

之间看到摘要消息

问题

我假设摘要消息必须打印到STDERR,因为我将STDOUT传递给文件,其内容是正确的。

谁能看到我做错了什么?

2 个答案:

答案 0 :(得分:1)

试试这个:

#!/bin/bash
exec 3>&1
error=$({ mbuffer options >&3 ; } 2>&1)
exec 3>&-
echo "The message is \"${error}\"" >&2

这会将stdin通过mbuffer传递给stdout,并将已处理的stderr写入stderr。

答案 1 :(得分:1)

我想你可能试图应用错误的解决方案。你引用的那个处理了一个更复杂的问题。如果您的目标是将stdout指向文件并捕获stderr,那么应该这样做(是的,将stderr映射到stdout THEN stdout到文件是违反直觉的,但这是重定向如何工作的,你&# 39;重新发送流2到当前流1指向的地方,即stdout)

error=$(mbuffer -v 0 -4 -s 128k -m 1G -I 8023 2>&1 > /tank3/fs5/tst)
echo "The message is \"${error}\""