Além de \r
ou \b
abordagens, é possível usar o \033[2K
caractere de controle , que informa ao terminal para limpar toda a linha. A vantagem disso em comparação com \b
é que você não precisa corresponder o número \b
com a quantidade de caracteres que deseja excluir e comparado com\r
, não haverá caracteres aparecendo na tela se a nova linha for mais curta que a antiga 1.
Abaixo está o exemplo de como ele pode ser aplicado a esta pergunta, e aqui está um exemplo do aplicativo relacionado para criar uma saída semelhante às mensagens de inicialização. Neste exemplo em particular, o cronômetro será desativado assim que o segundo segundo for alcançado e a linha do cronômetro será substituída por "Pronto!" frase.
#!/bin/bash
sek=60
echo "60 Seconds"
while ((sek--)); do
printf "One moment please: %d" "$sek"
sleep 1
printf "\r%b" "\033[2K"
done
echo "Ready!"
Outra alternativa seria empregar dialog
comando para criar diálogos simples na linha de comando. A caixa de diálogo permanecerá na tela durante o tempo do cronômetro e será atualizada com o loop e, quando terminar, o cronômetro será substituído pela mensagem "Pronto! Pressione para sair" de uma maneira uniforme:
#!/bin/bash
sek=60
echo "60 Seconds"
while ((sek--)); do
echo "$sek" | dialog --progressbox "Please wait" 10 25
sleep 1
done
dialog --msgbox "Ready! Press <OK> to finish" 10 25
watch
comando, embora eu não tenha certeza exatamente como fazê-lo.