Implementando um simples manipulador de eventos de teclado

Publicado por Sandro Marcell (última atualização em 18/07/2011)

[ Hits: 7.014 ]

Homepage: http://sanmarcell.wordpress.com

Download keyboard_event




Muitas vezes um usuário quer que determinada ação ocorra em seu script ao se pressionar uma única tecla, mas no shell não há nenhum tipo de manipulador que faça esse serviço. O mais próximo seria utilizando o built-in trap para capturar sinais de interrupção tais como: Ctrl+C, Ctrl+D, etc... Porém para o propósito acima ele não se adequá muito bem. Para resolver isso você pode utilizar (adaptando é claro!) este simples shell script.

  



Esconder código-fonte

#!/bin/sh
#
# Implementacao simples dum "Manipulador de eventos de teclado" em shell script.
# Autor: Sandro Marcell (smarcell)
# <smarcell@myopera.com> | <http://www.myopera.com/smarcell/blog>
# Boa Vista, Roraima - 10/05/2011.
#
PATH="/bin:/usr/bin:/usr/local/bin"

# Define a tecla que controlara a parada do evento
tecla_controle="s"
# Boas praticas de programacao =)
# - Sempre defina as variaveis antes de utiliza-las
tecla_pressionada=""

# Poe o terminal em modo especial de interpretacao de caracteres
stty -echo -icanon min 0

# O evento ocorrera dentro deste loop
while true
do
   [ "$tecla_pressionada" = "$tecla_controle" ] && break
   # Seus codigos aqui!
   echo "Pressione a tecla '$tecla_controle' para sair do loop." ; sleep 1s
   read tecla_pressionada   
done

# Restaura o modo padrao do terminal
stty sane

echo ">> Voce pressionou a tecla '$tecla_controle' e finalizou o loop!"

exit 0

Scripts recomendados

Atualizar repositórios Git

Script Iptables para servidor DNS e SSH

Firewall para web server

Bloquear e-mails em massa ZIMBRA

Sysinfo 2.0 - Info do sistema


  

Comentários
[1] Comentário enviado por julio_hoffimann em 18/07/2011 - 10:17h

Ótimo script Sandro!

Esses pequenos macetes ajudam bastante em ocasiões extraordinárias.

Abraço!

[2] Comentário enviado por uberalles em 18/07/2011 - 10:37h

Dependendo do caso, você pode até usar o /etc/inputrc. Ou mesmo o comando trap. Me ajudam bastante tbm.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts