Implementando a famosa hélice ASCII

Publicado por Sandro Marcell 21/12/2008

[ Hits: 7.996 ]

Homepage: http://sanmarcell.wordpress.com

Download helice.sh




Simples script que implementa atráves do método POG, a clássica hélice ASCII. Bom para ser utilizado em scripts que realizam tarefas longas e que não reportam informações ao usuário durante esse período.

POG = Programação Orientada a Gambiarras =)

Falou!!! ;)

  



Esconder código-fonte

#!/bin/bash --norc
#
# Metodo POG basico para implementar a classica helice ASCII.
#
# Este metodo pode ser utilizado para incrementar scripts que realizam
# operacoes longas, e que nao retornam informacoes durante esse tempo!
#
# Sandro Marcell (sandro_marcell@yahoo.com.br)
# Boa Vista, Roraima - 18/12/2008
#
# Mais detalhes: 'man ascii'
#
# P.S.: POG = 'Programacao Orientada a Gambiarras' =)
PATH="/bin:/usr/bin:/usr/local/bin"

__helice__ ()
{
   # 1 - Executa-se o comando em background:
   sleep 10 > /dev/null 2>&1 & # Usando o sleep como exemplo!
   
   # Tornando o cursor invisivel (opcional!)
   tput civis
   
   # 2 - Checa se o comando em background ainda esta em execucao:
   while [ -d /proc/$! ]
   do
      # 3 - "Monta-se" a helice:
      for i in / - \\ \|
      do
         # Tempo de 'refresh':
         sleep .1

         # Usando a sequencia de escape '\e[1D'
         # para posicionar os caracteres:
         echo -ne "\e[1D$i"
         # O escape '\e[1D' move o cursor uma coluna
         # para esquerda!
      done
   done
   
   # Restaura o cursor *
   tput cnorm
}

# 4 - Finalmente, mostra-se o resultado na tela:
echo -n "Aguarde...  "
__helice__
echo -e "\e[1DOk\nFim do processo em background..."
# Fim

Scripts recomendados

Fatorial

Simulador do MS-DOS

Script para limpeza de arquivos temporários em Sabayon Linux

Check bandwidth para Nagios

Equacao de Segundo Grau em Dialog


  

Comentários
[1] Comentário enviado por slackmen em 21/12/2008 - 18:05h

Gostei...

[2] Comentário enviado por SMarcell em 22/12/2008 - 12:36h

Versão "melhorada":

http://www.slackbr.org/forum/viewtopic.php?f=45&p=77979&sid=0a8418d01c7091c8ff11b265f1926e02#p77979

Opa! Valeu pelo comentário cara!

Ah, só complementando algumas informações:

O comando executado em background (que no caso do script, esta sendo executado dentro da função):
--------------------------
__helice__ ()
{
# 1 - Executa-se o comando em background:
sleep 10 > /dev/null 2>&1 & # Usando o sleep como exemplo!
...
}
---------------------------

Pode ser disparado fora dela sem problemas!
---------------------------
# 1 - Executa-se o comando em background:
sleep 10 > /dev/null 2>&1 & # Usando o sleep como exemplo!

__helice__ ()
{
...
}
---------------------------

Fiz do primeiro modo visando principalmente facilitar a didática e entendimento. Mas recomendo que se você for implementar isso em seus scripts, utilize o segundo modo!

=)

[3] Comentário enviado por eduardofraga em 01/01/2009 - 11:00h

Achei legal, vou copiar...

Você sabe onde eu acho um com Barra de progresso?

[4] Comentário enviado por SMarcell em 01/01/2009 - 19:08h

Eh aí Eduardo, beleza cara? Valeu pelo comentário!

Quanto a questão da barra de progresso, ela é um pouco mais específica e sua implementação vai depender do tipo de ação que você esteja querendo "monitorar".

Mesmo assim, olha um exemplo "tosco":

------------------
sleep 10 > /dev/null 2>&1 &
while [ -d /proc/$! ]
do
echo -n "#"
sleep .5
done;
echo " Ok"
------------------

Ah, também tem essa aqui (um programinha bem legal):
http://www.theiling.de/projects/bar.html

---Editado---


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts