我正在编写一个使用以下命令安装升级的应用程序opkg包装系统。
有没有办法获得整体进度,以便我可以制作进度条?
答案1
我对opkg不熟悉,不知道它是否提供原生进度条;我看到的最接近的是-V
详细程度。如果没有更好的解决方案,那么您可以保存以下脚本(例如,名为 的文件jspb
),使其可执行(chmod u+x jspb
),然后调用jspb opkg upgrade packagename
getA进度条。
有更好的创建进度条的方法,但我想写一些东西来模拟进度条。它有一个主要要求:/proc 伪文件系统的存在,以便它可以跟踪您给它的作业的进度。否则,它相当简单,因此应该可以在大多数 shell 中工作(在 bash、ksh、dash 和 Bourne sh 中测试)。因为它是如此可移植,shellcheck 抱怨脚本使用的“过时”和“遗留”结构,这是正确的。它确实能够智能地填充屏幕的列 - 尝试在更新过程中调整窗口大小!
#!/bin/sh
# Jeff's progress bar
# *simulates* a progress bar
# better options:
# https://github.com/Xfennec/progress
# http://www.theiling.de/projects/bar.html
if [ ! -n "$*" ]
then
echo Nothing to do, exiting!
exit 0
fi
if [ ! -d /proc/$$ ]
then
echo Missing /proc, sorry
exit 1
fi
sh -c "$*" &
PID=$!
# give the command a chance to fail immediately, if it will
sleep 1
# dash, Bourne sh do not have $RANDOM
HAVERANDOM=0
if [ -n "$RANDOM" ]
then
HAVERANDOM=1
fi
i=1
while [ -d /proc/$PID ]
do
# simulate progress
if [ $HAVERANDOM ]
then
sleep `expr $RANDOM % 4`
else
sleep `expr $i % 4`
fi
# see if our window got resized
cols=`tput cols`
if [ $i -ge $cols ]
then
printf "\r"
# clear out the old progress bar and start over!
while [ $i -gt 1 ]
do
printf " "
i=`expr $i - 1`
done
printf "\r"
fi
# making progress!
printf "#"
i=`expr $i + 1`
done
# only clear the progress bar it if we wrote something
if [ $i -gt 1 ]
then
pacman=1
printf "\r"
while [ $pacman -lt $i ]
do
printf " "
pacman=`expr $pacman + 1`
done
printf "\r"
fi
主副本已开启吉图布