Pular para o conteúdo

Implementando um simples manipulador de eventos de teclado

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.
Sandro Marcell SMarcell
Hits: 7.433 Categoria: Shell Script Subcategoria: Miscelânea
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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.
Download keyboard_event Enviar nova versão

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

Script para softwares de rede

Redundância de links dedicados

Gerenciar usuários do OpenLDAP com Sistema ZIMBRA

Ubuntu - Removendo kernels antigos

retira espaços em branco de arquivos

#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

Entre na sua conta para comentar.