Verifique se uma tela está ativa e, em seguida, exiba a contagem regressiva

1
#!/bin/bash
DATE=$(date +"%m-%d-%Y")
Backup_from="/home/mc/server/prison/"
Backup_to="/home/mc/backups/PRISON-$DATE.tar" 

echo "Starting backup of $Backup_from to $Backup_to"
screen -dmS backup tar -zcvpf $Backup_to $Backup_from
if ! screen -list | grep -q "backup"; then
    for i in {10..1};do echo -n "$i." && sleep 1; done 
fi
echo "Done" 

Este é o meu script de backup atual, quero mostrar uma contagem regressiva enquanto a tela está ativa. Mas, em seguida, pare quando estiver inativo / removido / excluído.

    
por negatory 23.03.2015 / 14:28

1 resposta

0

Você quer fazer uma contagem regressiva, enquanto a tela enquanto está ativa? Nesse caso, você pode alterar o seu loop if e for com while , assim:

while (screen -list backup|grep -q backup); do
    # delay
    sleep 1

    # display another dot
    echo -n .
done

Isso exibe um ponto a cada segundo até que sua sessão screen termine. Quanto à contagem regressiva, como você saberia o tempo de início adequado (quantos segundos contar)?

Como alternativa, se você quiser repetir animação de 3 pontos:

# init counter
i=0;
while (screen -list backup|grep -q backup); do
    # delay
    sleep 1

    # display dot
    echo -n "."

    # increase conter
    i=$((i+1))

    # on every 3rd loop...
    if [ $i -gt 3 ]; then
        # ...reset counter...
        i=0

        # ...and clear current line and return the cursor
        echo -en "\r\e[K"
    fi
done 
    
por madneon 23.03.2015 / 15:02