Par*_*roX 2 linux perl command
给出以下bash脚本:
testing.sh:
for i in {1..50}; 
do 
    sleep 0.1;
    echo -n $i;
done
如何使用每个回波实时进行PERL输出?它的工作正常,echo但echo -n似乎让PERL认为它是一个很大的回声,而不是单独的回声.
PERL代码适用于普通回声
$| = 1;
open CMD, "testing.sh 2>&1 |";
         while (<CMD>) {
                print "$_ \r";
        }
close CMD;
如果你运行它,你会发现PERL不会打印任何东西5秒(50*0.1s).如果您只是更改为echo -n,echo那么它将实时输出.
这里的想法是我echo -ne "...\r"在bash中使用命令,我希望使用PERL实现相同的效果.
编辑:
我的1..50例子只是为了证明.实际上我想在PERL中打印一个bash进度条,它将更新如下:
[####..............................................] 6.20%
[####..............................................] 6.40%
[#####.............................................] 7.40%
除了bash将使用\ r而不是\n.这与wget的进度条类似.我希望在PERL中有相同的效果.好处是我看到读取可以通过X字符读取,并且回声将是设定长度.我找不到任何适合我想要做的事情的好例子.
编辑2:
我得到了我需要读的东西......
现在我正在使用进度条来完善它.进度条正好是60个字节,我使用以下内容:
$| = 1;
open CMD, "testing.sh 2>&1 |";
my ($buf, $data, $n);
while (($n = read CMD, $data, 60) != 0) {
  print $data;
}
close CMD; 
while(<CMD>)一次读一行.  echo -n不发送换行符,所以在达到EOF之前没有"行"可读.您可以使用read或getc代替readline您所获得的隐含<CMD>一次读取一个角色.Term::ReadKeyCPAN中还有一个模块,允许非阻塞单字符读取.