Caixa de diálogo de progresso do console Bash com saída de comando

5

Eu tenho dialog instalado, onde gostaria de ter um bom diálogo de progresso, como este:

+-------[ title ]--------+
|                        |
| +-[ console output ]-+ |
| | output line11      ^ |
| | output line12      | |
| | output line13      | |
| | output line14      # |
| | output line15      | |
| | output line16      v |
| +--------------------+ |
| #########80%#####::::: |
+------------------------+

Então, por exemplo, ao atualizar 5 pacotes em uma distro, ele mostra o progresso (aqui, o pacote 4 é atualizado de 5, isto é, 80%), mas mostra a saída detalhada dos comandos executados. Isso é possível?

Eu suspeito que seja, mas não consigo obter uma solução de trabalho com --tailboxbg e --gauge .

    
por pihentagy 27.05.2013 / 13:32

1 resposta

7

Certo, você pode fazer isso com --gauge :

#!/bin/bash
declare PACKAGES=("/etc/crontab"  "/etc/dmtab"  "/etc/fstab"  "/etc/inittab"  "/etc/mtab")
NUM_PACKAGES=${#PACKAGES[*]} # no. of packages to update (#packages in the array $PACKAGES)
step=$((100/$NUM_PACKAGES))  # progress bar step
cur_file_idx=0
counter=0
DEST=${HOME}
(
# infinite while loop
while :
do
    cat <<EOF
XXX
$counter
$counter% upgraded

$COMMAND
XXX
EOF
    COMMAND="cp ${PACKAGES[$cur_file_idx]} $DEST &>/dev/null" # sets/updates command to exec.
    [[ $NUM_PACKAGES -lt $cur_file_idx ]] && $COMMAND # executes command

    (( cur_file_idx+=1 )) # increase counter
    (( counter+=step ))
    [ $counter -gt 100 ] && break  # break when reach the 100% (or greater
                                   # since Bash only does integer arithmetic)
    sleep 10 # delay it a specified amount of time i.e. 1 sec
done
) |
dialog --title "File upgrade" --gauge "Please wait..." 10 70 0

Este código em ação:

Nota . Este código realmente copia esses cinco arquivos de /etc/ na sua pasta $HOME .

    
por 27.05.2013 / 14:04

Tags