'yum -y update'运行时,如何每隔2秒回显一段时间?

时间:2012-01-12 21:42:21

标签: bash loops while-loop yum

我正在编写一个脚本来对客户服务器进行一些默认配置,并使其几乎100%正常工作。

我无法弄清楚如何在某种循环中运行yum -y update,回显“。”在更新时每两秒钟。

这是一个帮助解释更多的代码示例

YUMLOG=/var/log/config.log
while [ yum -y update > $YUMLOG 2>&1 ]
do
    echo "."
    sleep 2
done

显然,这不起作用,但我不知道要做什么更改,以便 工作。我在代码中有其他部分给我这个'进度条'效果,但没有任何内部循环。例如:

if [ $SETXENNET != "y" ]; then
        sleep 1
        cp $TEMPLATEDIR/rc.local.template $TEMPLATEDIR/rc.local.new
        echo "."
        sleep 1
        cp $TEMPLATEDIR/rc.local.new /etc/rc.local
        echo "."
        sleep 1
        chmod a+x /etc/rc.local
        echo "."
        sleep 1
    else
        sleep 1
        cp $TEMPLATEDIR/rc.local.xen.template $TEMPLATEDIR/rc.local.xen.new
        echo "."
        sleep 1
        cp $TEMPLATEDIR/rc.local.xen.new /etc/rc.local
        echo "."
        sleep 1
        chmod a+x /etc/rc.local
        echo "."
        sleep 1
    fi

而且,在我让人们为所有'睡眠'大喊大叫之前,我必须有办法显示脚本的进度,因为运行它的人不会知道他们在做什么(他们只是阅读按键从清单中检查并完成某些事情后检查。

所以,我需要一个漂亮,干净,简单的方法来1)看看用简单的英语发生了什么(即'完成'或'跳过')和2)可视化脚本仍在运行,即使屏幕上没有显示任何内容。

最后,我不能对我显示进度的方式进行全局更改,有太多代码需要对其执行的所有操作进行更改。但是,如果这是绝对唯一的答案,我想这可能是我必须要做的......有一天......

2 个答案:

答案 0 :(得分:7)

这样的事情怎么样?点打印在后台执行的功能中。当yum完成运行时,你可以杀死它。

#!/bin/bash

function dots {
   while : ; do
      echo -n ". "
      sleep 2s
   done
}

dots &
pid=$!

# do real work here
sleep 15s

kill -9 $pid
echo "done!"

答案 1 :(得分:1)

你可以这样做。让yum在后​​台工作,首先创建一个临时文件,然后删除它。当文件存在时,主进程只是循环,休眠和打印:

(touch tmpfile ; yum ... ; rm tmpfile)&
(while test -e tmpfile ; do echo . ; sleep 2 ; done)