Eu não estou familiarizado com o opkg para saber se ele fornece uma barra de progresso nativa; a coisa mais próxima que vejo é o nível de verbosidade -V
. Se não houver uma solução melhor, você pode salvar o script abaixo (digamos, um arquivo chamado jspb
), torná-lo executável ( chmod u+x jspb
) e, em seguida, chamar jspb opkg upgrade packagename
para obter a barra de progresso.
Existem melhores maneiras de criar barras de progresso, mas eu queria escrever algo que simulasse uma barra de progresso. Ele tem um requisito principal: a existência do pseudo-sistema de arquivos / proc, para que ele possa rastrear o progresso do job que você fornece. Caso contrário, é bastante simplista e, portanto, deve funcionar na maioria dos shells (testado em bash, ksh, dash e Bourne sh). Por ser tão portátil, o shellcheck reclama - com razão - sobre as construções "antiquada" e "legada" que o script usa. Ele consegue preencher as colunas da sua tela de forma inteligente - tente redimensionar sua janela no meio da atualização!
#!/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
A cópia mestra está em Github