Como mostrar uma barra de progresso na tela com base na saída de um programa?

0

Eu fiz um cálculo usando o CUDA e leva cerca de 12 minutos para concluir o cálculo inteiro. Estou usando este comando em um arquivo .sh para executar o programa:

CUDA_VISIBLE_DEVICES=0 ./a1.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=1 ./a2.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=2 ./a3.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=3 ./a4.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=4 ./a5.out | tee -a output.txt &
CUDA_VISIBLE_DEVICES=5 ./a6.out | tee -a output.txt &

Agora quero mostrar uma barra de progresso para esse processo na janela de linha de comando do usuário. Existe alguma maneira de fazer isso?

    
por agangwal 12.07.2017 / 06:38

1 resposta

3

Use pv(1) no modo de linha:

COMMAND | pv --line-mode --size 1000 >> output.txt

ou menor

COMMAND | pv -ls 1000 >> output.txt

-s / --size define o número de unidades de saída esperadas (bytes por padrão ou linhas no modo de linha).

Se você deseja capturar a saída e exibir o progresso de vários comandos em execução em paralelo, você pode fazer isso com uma instrução composta:

{ COMMAND1 & COMMAND2 & COMMAND3; } | pv -ls 1000 >> output.txt

Nesse caso, você precisa especificar o número de unidades de saída esperadas de todos os comandos no total .

Demonstração

for i in {1..200}; do sleep 0.1; echo "$i"; done | pv -ls 200 > /dev/null
    
por David Foerster 12.07.2017 / 14:22