当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传递给文件,其内容是正确的。
谁能看到我做错了什么?
答案 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}\""