管道查看循环序列(向 While 或 For 循环添加进度条) - Bash

问题描述 投票:0回答:1

此处此处所发布,pipeviewer 是一种根据其大小显示内容进度的工具。从那里可以看出,他们提出的问题是获得一个在没有数据量的情况下运行的进程的进度条。

我想知道是否可以使用 Pipeviewer 显示循环的进度,考虑到我正在从文件中读取它,并且我知道它的大小。

我尝试过类似的事情

while IFS= read -r line;
 do
   <code>
 done < file.txt | pv

这绝对行不通,因为 pv 仅显示一个空的进度条。

有什么想法吗?

提前谢谢您!

bash while-loop pipe progress-bar viewer
1个回答
1
投票

如果可以的话,用

pv
而不是
cat
读取文件,这样 pv 会自动获取文件大小并适当格式化进度条。

例如:

pv very_big_file.txt

或者,在你的例子中:

pv file.txt | while IFS= read -r line;
do
    <code>
done

如果无法用

pv
读取文件,可以用
pv
传递
-s size
文件的大小。 这样,
pv
将期望流程为该长度,并按比例设置进度条的格式。

您可以通过以下方式获取文件的大小:

stat -c '%s' file

wc -c < file

例如:

command1 | command2 | ... | pv -s $(stat -c '%s' file) | commandX | ...

在你的例子中:

cat file.txt | pv -s $(stat -c '%s' file.txt) | while IFS= read -r line;
do
    <code>
done

如您所见,在 cat 之后使用

pv
是多余的,应该用读取文件的
pv
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.