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

标签 bash shell command-line-interface

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

do_something > file.txt(我在另一个 echo 输出中使用此 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 中读取并找到“新/更新”字符数?* <编辑

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

最佳答案

您要做的是在后台运行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 - 如何显示另一个命令的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30396252/

相关文章:

bash - 为什么 bash(来自 git 安装)突然给我段错误?

linux - 如何在bash中将结果转换为整数

python - 具有多个参数的 Bash 脚本

shell - 如果 Make 规则失败,删除目标文件的优雅方式

user-interface - 创建 Vim 风格的命令行界面

bash - bash文件中可以映射哪些常见的HDFS命令?

bash - while 循环与拆分文件的输入并行

linux - 在 bash 脚本中从 du 中删除输出的文件部分

php - $_SERVER ['argv' ] HTTP GET 和 CLI 问题

mysql - 运行 "show databases;"查询导致 "No database selected"错误,但只是第一次