如此处和此处所发布,pipeviewer 是一种根据其大小显示内容进度的工具。从那里可以看出,他们提出的问题是获得一个在没有数据量的情况下运行的进程的进度条。
我想知道是否可以使用 Pipeviewer 显示循环的进度,考虑到我正在从文件中读取它,并且我知道它的大小。
我尝试过类似的事情
while IFS= read -r line;
do
<code>
done < file.txt | pv
这绝对行不通,因为 pv 仅显示一个空的进度条。
有什么想法吗?
提前谢谢您!
如果可以的话,用
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
来代替。