0

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

试图实现这个答案

#!/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 管道传输到文件,并且其内容是正确的。

谁能看到我做错了什么?

4

2 回答 2

1

尝试这个:

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

这将通过 mbuffer 将标准输入管道传输到标准输出,并将处理后的标准错误写入标准错误。

于 2013-04-12T17:58:54.050 回答
1

我想你可能试图应用错误的解决方案。你提到的那个处理了一个更复杂的问题。如果您的目标是将标准输出定向到文件并捕获标准错误,那么应该这样做(是的,将标准错误映射到标准输出然后标准输出到文件是违反直觉的,但这就是重定向的工作原理,您将流 2 发送到流 1 的位置指向那一刻,即标准输出)

error=$(mbuffer -v 0 -4 -s 128k -m 1G -I 8023 2>&1 > /tank3/fs5/tst)
echo "The message is \"${error}\""
于 2013-04-12T18:10:51.253 回答