Autor Tópico: Uma pequena animação em texto.  (Lida 3396 vezes)

Offline AdvancedS17

  • Usuário Ubuntu
  • *
  • Mensagens: 107
    • Ver perfil
Uma pequena animação em texto.
« Online: 01 de Agosto de 2012, 14:17 »
Boa tarde.
Pessoal quais comandos posso utilizar para que em um script apareça um ponto final após o outro a cada 1 segundo ou outro caractere qualquer como _ ou -. Estava tentando através de echo, sleep 0.5/1, e clear com | entre eles, outra hora & mas não está do jeito que eu gostaria que ficasse. Preciso de algo parecido com aqueles pontinhos finais que vão aparecendo quando serviços estão sendo carregados na inicialização de distros que mostram em modo texto o que está sendo carregado.
Maçon, apoiador de todas as religiões (de preferência conformistas) e enfocado no cristianismo. Universitários do mundo todo, esqueçam os dogmas, devolvam meu corpo que perdi ao longo dos séculos; só não peço para me tornarem um deus, pois ter uma saúde perfeita já basta. Holandês aqui não tem vez.

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Uma pequena animação em texto.
« Resposta #1 Online: 01 de Agosto de 2012, 15:58 »
"\b" pra voltar uma coluna. Ex

Código: [Selecionar]
#!/bin/bash
printf "[          ]"
i=2
while ((i>1)); do
    j=12
    while ((j>1)); do
        printf "\b"
        ((j--))
    done
    while ((j<11)); do
        ((i%2 == 0)) && printf "o" || printf "ø"
        sleep 1
        ((j++))
    done
    printf "]"
    ((i++))
done

Offline raidicar

  • Usuário Ubuntu
  • *
  • Mensagens: 576
  • Quad Shot of Ubuntu
    • Ver perfil
Re: Uma pequena animação em texto.
« Resposta #2 Online: 01 de Agosto de 2012, 18:38 »
A uns tempos atraz tive de fazer um troço meio doido, segue uma parte.
Citar
k=0;
traco=("[---]" "[ \\]" "[ | ]" "[ / ]" "[---]" "[ \\]" "[ | ]" "[ / ]");
espace=""
for i in `seq 42`
do
      m=$(($i%9));
      if [ $m -eq 0 ]; then k=0; fi
      espace="$espace ";
      echo -e -n "      $espace[${traco[$k]}] \r";
      k=$(($k + 1));
      sleep 0.03;
done
clear

Ai fica fácil adaptar qq coisa a partir dele, no caso:

Citar
traco=(. . .. ... .... ..... ...... ....... ........ ......... ..........);
for i in `seq 10`
do
  echo -e -n " $i  ${traco[$i]} \r" 
  sleep 1
done
Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

Offline AdvancedS17

  • Usuário Ubuntu
  • *
  • Mensagens: 107
    • Ver perfil
Re: Uma pequena animação em texto.
« Resposta #3 Online: 03 de Agosto de 2012, 00:23 »
Valeu mesmo pelas dicas. De tudo o que vocês me responderam (que foi tudo muito avançado em script) aproveitei somente o retorno com \b utilizando algo bem simples assim:
printf . \b
sleep 0.1
printf . \b
sleep 0.1
printf .
Dessa forma fica aparecendo um ponto a cada 0.1 segundo. Agora só falta eu conciliar isso com o tempo de execução de alguns comandos.
Muito obrigado.
« Última modificação: 03 de Agosto de 2012, 00:47 por AdvancedS17 »
Maçon, apoiador de todas as religiões (de preferência conformistas) e enfocado no cristianismo. Universitários do mundo todo, esqueçam os dogmas, devolvam meu corpo que perdi ao longo dos séculos; só não peço para me tornarem um deus, pois ter uma saúde perfeita já basta. Holandês aqui não tem vez.