如何显示另一个命令的进度
How to display progress of another command
我需要有关 bash 脚本的帮助,我 运行 像这样:
do_something > file.txt
(我在另一个 echo 输出中使用了这个 file.txt 的第三行)
现在我需要获取 file.txt 第二行的一些字符。
(只有点 - ".")
我可以用这个命令得到字符数:
progress=$(awk 'NR==2' file.txt | grep -o \. | wc -w)
但问题是,file.txt 和第二行的字符数是 "progress bar",所以它在时间上从 0 - XY(即 100)个字符变化。
我想用它来查看百分比进度:echo -ne "$progress % \r"
我怎么能在循环中做到这一点? do_something > file.txt
必须只开始一次。在接下来的 ~5-20 秒内,它在第二行打印点,我必须每秒将这个数字更新到我的输出 echo "XY %".
如何每秒读取 file.txt 并找到 "new/updated" 个字符?* < edit
编辑:
* 这是实时过程。我的 do_something > file.txt 是这个文件的 "printing" 点,我希望打印结果实时保存在 $progress 中。所以第一个命令是将点打印到文件中,我每秒实时计算它们并打印从 0-100%
完成的百分比
首先,你应该运行你在后台的命令:
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
你要做的就是在后台运行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
我需要有关 bash 脚本的帮助,我 运行 像这样:
do_something > file.txt
(我在另一个 echo 输出中使用了这个 file.txt 的第三行)
现在我需要获取 file.txt 第二行的一些字符。 (只有点 - ".")
我可以用这个命令得到字符数:
progress=$(awk 'NR==2' file.txt | grep -o \. | wc -w)
但问题是,file.txt 和第二行的字符数是 "progress bar",所以它在时间上从 0 - XY(即 100)个字符变化。
我想用它来查看百分比进度:echo -ne "$progress % \r"
我怎么能在循环中做到这一点? do_something > file.txt
必须只开始一次。在接下来的 ~5-20 秒内,它在第二行打印点,我必须每秒将这个数字更新到我的输出 echo "XY %".
如何每秒读取 file.txt 并找到 "new/updated" 个字符?* < edit
编辑: * 这是实时过程。我的 do_something > file.txt 是这个文件的 "printing" 点,我希望打印结果实时保存在 $progress 中。所以第一个命令是将点打印到文件中,我每秒实时计算它们并打印从 0-100%
完成的百分比首先,你应该运行你在后台的命令:
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
你要做的就是在后台运行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