2013-04-12 1 views
0

Когда mbuffer заканчивается на принимающей стороне, он печатает время и скорость, которые я хотел бы получить в $time и $speed.Получение stderr от mbuffer до переменной

Попытка реализовать 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 I в файл, и его содержание является правильным.

Может ли кто-нибудь увидеть, что я делаю неправильно?

ответ

1

Возможно, вы пытались применить неправильное решение. Тот, на который вы ссылались, имел дело с несколько более сложной проблемой. Если ваша цель - направить stdout на файл и захватить stderr, это должно сделать это (да, это противоречит отображению stderr в stdout THEN stdout в файл, но так работает перенаправление, вы отправляете поток 2 туда, где поток 1 указывает на тот момент, который является стандартным)

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

попробовать это:

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

Это позволит трубы через стандартный ввод mbuffer стандартный вывод и записывать обработанный поток ошибок в поток ошибок.