linha de cada vez filtro de progresso de trabalho para script

0

Então, digamos que eu tenha um script que trabalhe em grupos de arquivos e faça vários tipos diferentes de operações.

Imprimir um nome de arquivo à medida que ele é processado ajuda a dar uma ideia de como as coisas estão indo bem.

Mas o volume de dados abafaria outra mensagem, como em que estágio o script está.

O que eu gostaria é de algo que leia entrada padrão e mude a nova linha para um retorno de cartucho e a seqüência termcap para passar para o final da linha. (ou até mesmo um retorno, uma largura terminal de spas e outro retorno)

Usando isso, a saída de estágios individuais aparecerá como uma única linha de mudança sem rolagem (a menos que haja uma quebra de linha. bem, um problema por vez)

Eu poderia escrever isso, mas parece útil o suficiente para alguém provavelmente ter feito isso antes, mas não tenho idéia do nome do filtro.

Já foi feito?

(usar someprogram | dialog --progressbox 1 80 é parecido com o que estou procurando)

    
por infixed 30.06.2017 / 19:52

1 resposta

0

Eu acho que o que você quer fazer é ter uma linha de progresso que é constantemente atualizada sem rolagem, então aqui está algo que escrevi para isso:

files="$(ls /some/folder)"
elems="$(echo "$files" | wc -w)"
cnt=0
for name in $files; do
    let "cnt+=1"
    printf "\rMyScript - Processing file %3i of %3i: %.40s" "$cnt" "$elems" "$name"
done
echo

Isso fornece uma única linha, por ex. MyScrpit - Processing file 5 of 14: foo.a .

Você também pode modificar isso para funcionar via pipe semelhante a dialog --progressbox :

total="$1"
cnt=0
while IFS='$\n' read -r name; do
    let "cnt+=1"
    printf "\rProcessing file %3i of %3i: %.40s" "$cnt" "$total" "$name"
done < /dev/stdin
echo

É claro que você pode deixar de fora o contador e apenas imprimir os nomes dos arquivos (se você não quiser fornecer a contagem total de antemão como um parâmetro). O comprimento do campo fixo no printf irá garantir que não haverá quebra de linha (a menos que a janela do terminal seja ainda menor).

    
por 01.07.2017 / 00:13

Tags