Mis*_*iry 2 bash loops yum while-loop
我正在编写一个脚本来对客户服务器进行一些默认配置,并使其几乎100%正常工作.
我无法弄清楚的是如何运行yum -y update某种回声"回声".在更新时每两秒钟.
这是一个代码示例,以帮助解释更多
YUMLOG=/var/log/config.log
while [ yum -y update > $YUMLOG 2>&1 ]
do
echo "."
sleep 2
done
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用,但我不知道要做什么改变,以便它确实有效.我在代码中有其他部分给我这个'进度条'效果,但没有任何内部循环.例如:
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
Run Code Online (Sandbox Code Playgroud)
而且,在我让人们为所有"睡眠"对我大喊大叫之前,我必须有办法显示脚本的进度,因为运行它的人不会知道他们在做什么(他们只是从核对清单中读取按键)当事情已经完成时检查).
所以,我需要一个漂亮,干净,简单的方法让他们1)看到简单的英语发生了什么(即'完成'或'跳过')和2)可视化脚本仍在运行,即使没有显示任何内容在屏幕上.
最后,我无法对显示进度的方式进行全局更改,有太多代码需要对其执行的所有操作进行更改.但是,如果这是绝对唯一的答案,我想这可能是我必须要做的......有一天......
这样的事怎么样?点打印在后台执行的功能中.当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!"
Run Code Online (Sandbox Code Playgroud)