查找单词时在终端中打印一个点

查找单词时在终端中打印一个点

假设我们有一个 bash,它将命令(显示在终端中)的输出输出到日志文件,如下所示:

#!/bin/bash
exec 3>&1 
exec 1> logfile.log # logfile.log contains all what will be printed in terminal and it will keep updating its content till the script finish it is job
command#1
command#2
command#3
.
.
.
.
.
echo -n "Process is DONE ..."
exec 1>&3
exec 3>&- 

如果此脚本需要几分钟才能完成,则可以通过一一运行其中包含的命令来完成。

这个脚本如何每秒打印一个点,直到找到“进程在文件“logfile.log”中完成”这句话?或者在屏幕上创建任何动作(即进度条或截图)只是为了显示进程仍在运行活?

答案1

在我看来,您使用的设计过于狡猾。您可以考虑以下设计:

#!/bin/bash

LOG=logfile.log

#echo $i #what's this for?
exec 3>&1 
exec 1> "$LOG" # logfile.log contains all what will be printed in terminal and it will keep updating its content till the script finish it is job
#command1 &
sleep 5 &
sleep 10 &
sleep 15 &
for i in {1..7}; do
    echo x
    sleep 1
done &
#command2 &
#command3 &
#and so on...

exec 1>&3
exec 3>&- 
echo Progress:
while [ $(jobs -pr | wc -l) -gt 0 ] ; do 
    #jobs
    echo -n "."
    sleep 1
done

echo -e "\nProcess is DONE ..." | tee -a "$LOG"

添加了几行说明性内容:

  • 第 9-15 行是示例命令
  • 第 24 行可以不进行哈希处理以显示逻辑

答案2

您是否需要寻找特定的字符串,或者在进程结束时停止观看就足够了?一种简单的方法可能是将输出通过pv(手册页)以获得进度条,并且可以tail在最后检查输出文件以查看最后发生了什么。

编造的例子:

./process.sh  | pv > output.file ; tail -1 output.file 
  34 B 0:00:02 [16.8 B/s] [   <=>                                ]
Process done.

相关内容