我正在编写一个脚本来对客户服务器进行一些默认配置,并使其几乎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)可视化脚本仍在运行,即使屏幕上没有显示任何内容。
最后,我不能对我显示进度的方式进行全局更改,有太多代码需要对其执行的所有操作进行更改。但是,如果这是绝对唯一的答案,我想这可能是我必须要做的......有一天......
答案 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)