Exibe uma barra de progresso enquanto esperamos que um processo retorne

0

Estou a olhar para esta resposta aqui e gostaria de implementar a barra de progresso enquanto aguardo por uma processo para executar - ou no meu caso - muitos.

Estou executando várias cópias de sistemas de arquivos grandes em paralelo usando o seguinte snippet

for svol in "${svols[@]}";
do
    syslog_info "copying $svol"
    ${CP} -p $svol $somedir &
done
syslog_info "Parallel copy ongoing..."
wait

e eu estou olhando para adicionar na barra de progresso para exibir enquanto aguardo os processos em segundo plano para retornar ..

Esta é a minha tentativa, alguém pode me dizer onde estou indo errado ou ajudar a fazê-lo funcionar?

for svol in "${svols[@]}";
do
    syslog_info "copying $svol"
    ${CP} -p $svol $somedir &
done
syslog_info "Parallel copy ongoing..."

i=1
sp="/-\|"
echo -n ' '

until wait;
do
    printf "\b${sp:i++%${#sp}:1}"
    sleep 0.1
done

EDIT: Eu atualizei o código original nesta questão para uma solução de trabalho testada - ainda tentando executá-lo até que a espera retorne

Como um lado não - o código original no topo funciona bem como está e o trecho a seguir também funciona como uma parte independente do código

i=1
sp="/-\|"
echo -n ' '

for i in {1..100};
do
    printf "\b${sp:i++%${#sp}:1}"
    sleep 0.1
done
    
por AK47 28.09.2016 / 17:06

2 respostas

2

wait bloqueia até que todas as tarefas em segundo plano tenham retornado, portanto você não pode usá-la como a condição until , pois ela será executada apenas uma vez.

Você pode usar [ -n "$(jobs)" ] para ver se tem trabalhos em execução:

while [ -n "$(jobs)" ]; do
  printf "\b${sp:i++%${#sp}:1}"
  sleep 0.1
done
    
por 28.09.2016 / 17:34
2

No GNU / Linux, você pode usar o Coreutils Progress Viewer ( progress , anteriormente conhecido como cv ) :

"${CP}" -p -- "$svol" "$somedir" & progress -mp "$!"
    
por 28.09.2016 / 17:22

Tags