【发布时间】:2016-06-20 04:16:32
【问题描述】:
我已经能够在某些进程运行直到它们完成时显示进度指示器,但是当我运行 while 循环时,我无法让代码正确显示相同的进度指示器。例如,当我在脚本中执行 ping 操作时,我会这样做:
/bin/ping -c 10 $ipaddress > /pinglog & PID=$!
printf "["
while kill -0 $PID 2> /dev/null; do
printf "."
sleep 1
done
printf "] "
我还可以在脚本中使用 sleep 命令显示进度:
sleep 30 & PID=$!
printf "["
while kill -0 $PID 2> /dev/null; do
printf "."
sleep 1
done
printf "] "
这两个示例都有效,我的输出如下所示:
[.........................}
这些点每秒都在继续,直到命令完成,这就是我想要的。但是我现在正在尝试使用 while 循环来获得相同的输出,但我无法获得我想要的结果。这是我到目前为止所拥有的。
while [[ ! $(/bin/grep -wo -m1 $VAR1 /logfile) ]] & PID=$!
printf "["
while kill -0 $PID 2> /dev/null; do
printf "."
sleep 1
done
printf "] "
do
sleep 5
done
echo $VAR1 was found
这会运行,但是当找到字符串并且输出如下所示时它不会停止:
[.] [.] [.] [.] [.] and on and on...
我尝试移动实际的 while 循环 do, sleep 5 并在第一个 printf 语句上方完成,但结果更糟,我什至没有得到进度指示器输出。如何解决此问题,以便获得与前 2 个示例相同的进度指示器输出,并且在找到我的模式时停止?
【问题讨论】:
标签: bash