如何显示另一个命令的进度

时间:2015-05-22 12:04:37

标签: bash shell command-line-interface

我需要帮助我运行这样的bash脚本:

do_something > file.txt(我在另一个回音输出中使用此file.txt的第三行)

现在我需要在file.txt的第二行获取一些字符。 (只有点 - "。")

我可以使用此命令获取字符数:

progress=$(awk 'NR==2' file.txt | grep -o \. | wc -w)

但问题是,file.txt和第二行的字符数是"进度条"所以它从0到XY(即100)个字符的时间变化。 我想用它来查看百分比的进度:echo -ne "$progress % \\r"

我怎么能在循环中做到这一点? do_something > file.txt必须只启动一次。在接下来的5-20秒内,它在第二行打印点,我必须每秒更新一次这个数字到我的输出回波" XY%"。

我如何每秒从file.txt中读取并找到" new / updated"字符数?*< 修改

编辑: *它的实时过程。我的do_something> file.txt是"打印"点到这个文件,我希望打印结果实时保存在$ progress中。因此,第一个命令是打印点到文件,我每秒实时计算它们并打印从0-100%完成的百分比

2 个答案:

答案 0 :(得分:1)

首先,您应该在后台运行命令:

do_something > file.txt &

然后您可以观察输出文件中的更改。这将每秒无限地打印file.txt的第二行。

while true; do sed -n '2p' < file.txt; sleep 1; done

如果您只想打印第二行上的字符数,可以执行以下操作:

while true; do sed -n '2p' < file.txt | wc -m; sleep 1; done

如果你想在第二行有100个字符时停止,你可以这样做:

MAX="100"
CUR="0"
while [ $CUR -lt $MAX ]; do CUR=`sed -n '2p' < sprint | wc -m`; echo $CUR; sleep 1; done

答案 1 :(得分:1)

您要做的是在后台运行do_something > file.txt,然后进行监控。您可以使用特殊的kill信号0来执行此操作。

do_something > file.txt &
PID=$!
while kill -0 $PID 2> /dev/null
do
    [calculate percent complete]
    [display percent complete]
    sleep 5
done