Como obter o progresso da instalação do opkg install?

1

Estou escrevendo um aplicativo que instala uma atualização usando o sistema de empacotamento opkg .

Existe uma maneira de obter o progresso geral para que eu possa fazer uma barra de progresso?

    
por user3528438 15.04.2016 / 03:32

1 resposta

0

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

    
por 15.04.2016 / 18:45

Tags