Como eu crio uma barra de processo falsa?

3

Eu quero que o terminal mostre algum tipo de barra de processo com base no tempo, como 1% a cada 60 segundos, por exemplo.

    
por Graham Miranda 23.04.2018 / 20:05

2 respostas

6

Crie uma barra de progresso no bash lista as abordagens para obter uma barra de progresso , então vou me concentrar na parte Como falsificar aqui. Vou usar 2 segundos em vez dos seus 60 aqui apenas para testar, ajuste o valor sleep para suas necessidades exatas.

Usando dialog , whiptail ou zenity (GUI)

for i in {1..100}; do sleep 2; echo $i; done | dialog --gauge 'Running...' 6 60 0

Esse loop de for faz um loop 1 sobre os números de um a cem e echo s a cada 2 segundos, a saída é canalizada para dialog , que mostra o número como o progresso em uma barra de progresso. Essa abordagem também funciona para whiptail e zenity --progress (GUI). A saída de dialog é assim com uma barra de progresso colorida usando 'curses' no modo de texto:

Usandopv

for i in {1..100}; do sleep 2; echo; done | pv -pWs100 >/dev/null

Esse loop é muito semelhante, apenas que imprime apenas uma nova linha (= 1 byte de dados) a cada 2 segundos, pv é então informado para esperar exatamente 100 bytes de dados e mostra p barra de rogress. Em uma janela de terminal com uma largura de 80 caracteres, a saída é assim:

[===============>                                                          ] 22%

Construindo sua própria barra de progresso

Com um loop simples, você também pode construir sua própria barra de progresso. Aqui estão alguns exemplos que imprimem 100 # em uma linha, uma por 2 segundos:

# number signs only
$ for i in {1..100}; do sleep 2; echo -n \#; done; echo
####################################################################################################

# with progress in % on the right
$ for i in {1..100}; do sleep 2; printf "%0.s#" $(seq 1 $i); printf "%0.s " $(seq $i 100); printf "%3d%%\r" "$i"; done; echo
######################################################                                                54%

# with progress in % on the left
$ for i in {1..100}; do sleep 2; printf "%3d%% " "$i"; printf "%0.s#" $(seq 1 $i); printf "%0.s " $(seq $i 100); printf "\r"; done; echo
 39% ####################################### 

1 Veja, um Polyptoton !

    
por dessert 23.04.2018 / 20:46
3

Barra de progresso falsa

Aqui está minha barra de progresso falsa:

Eleusayad,queéumaversãosupercarregadadezenitydaGUIpadrãousadanoterminal.Parainstalaroyaduse:

sudoaptinstallyad

Esteéocódigoquevocêpodecopiarecolar,porquetodostêmodiretório/usr/bin:

#!/bin/bash # NAME: yad-progress-bar # PATH: $HOME/bin # DESC: Display yad progress bar % with names. # DATE: Apr 23, 2018. title="AU question: https://askubuntu.com/q/1027543/307523" Percent=0 for f in /usr/bin/* ; do # 1000+ files so this is fake loop echo "#$f" # Display file name in progress bar. echo $Percent # Percent complete Percent=$(( $Percent + 1 )) [[ $Percent -gt 100 ]] && break sleep .05 # Change to 2 seconds for OP's fake. done | yad --progress --auto-close \ --width=500 --height=300 \ --title="$title" --enable-log "Current filename" \ --log-expanded --log-height=250 \ --log-on-top --percentage=0 \ --no-cancel --center exit 0

A porcentagem é incrementada em 1 em cada iteração do loop for . Deve calcular a porcentagem em mais de 1.000 arquivos, mas para depois de 100 arquivos.

    
por WinEunuuchs2Unix 24.04.2018 / 01:29