2014-12-02 43 views
1

这个疯狂的bash调用应该会针对我的ISP特定的服务器来控制下行速度。 当pv输出到sed时出现问题。而不是最后的结果表格pv sed插入第一个。管道不断更新输出时是正常行为吗?重定向不断更新输出

for ((i=0;i<1;i++)) ; do 
    echo DOWNLOAD $((2**30)) | nc ipv4.upcspeedtest.pl 10200 
done | 
pv -f -a 2> >(tee >(cat >&2)) 1> /dev/null | 
sed -r 's|\[ *([0-9]+).*|scale=3;print \1, "KiB/s\n", \1*8/1024, "Mib/s\n"|g' | 
bc -l 

PS。为了使这个工作,我简单地增加PV的时间间隔为300秒。

+0

sed应该处理来自PV的所有输出(假设它是基于行的),你确定没有发生?你是否等待看到什么时候完成(管道等可能会缓冲输入和输出)。 – 2014-12-02 13:23:50

+0

@EtanReisner sed与pv生成的载体返回有问题。 – 2014-12-02 19:06:17

+0

好的。我明白了这一点。 当管道'pv -a'到'sed'/ s/\ r// g''输出看起来像这样 '[579kiB/s] [486kiB/s] [439kiB/s] ...' pv produce \ r分隔的记录列表。 当管道光伏到'sed -r's | \ [*([0-9] +)。* | \ 1 | g'' sed取第一个马赫忽略光伏产生的输出。 一切都按预期工作。 – 2014-12-02 19:15:55

回答

0

好的。我明白了这一点。当管道pv -ased '/s/\r/ /g'输出看起来像这样[ 579kiB/s] [ 486kiB/s] [ 439kiB/s] ... pv产生\ r分隔的记录列表。当管pv到sed -r 's|[ ([0-9]+).|\1|g' sed采取pv产生的第一个马赫休息输出。一切都按预期工作。 –  BartłomiejSzczepaniak