Script para executar comandos assim que uma chave é atingida

0

Eu gostaria de fazer uma função repetitiva no bash, que executa o mesmo três comandos toda vez que qualquer tecla é pressionada.

No Windows, posso fazer isso com o comando pausar em um loop infinito em um arquivo de lote, que funciona bem para minhas necessidades.

A maioria das distros * nix não tem um comando de pausa equivalente, e read -p não está funcionando como eu gostaria.

Qual é a melhor maneira de conseguir o que eu preciso? Além disso, seria ser possível ter um comando diferente (para limpeza) executado quando um determinada combinação de teclas (digamos, Ctrl - C ) é entrada?

    
por John Waldorf 15.10.2015 / 21:53

1 resposta

1

Supondo que o bash, a read option -N pode ser útil:

  -N nchars return only after reading exactly NCHARS characters, unless
            EOF is encountered or read times out, ignoring any delimiter

Se você usar read -N 1 x , ele retornará assim que um caractere for entrou, sem esperar por uma nova linha.

Com relação à segunda parte da sua pergunta, clique em Ctrl - C envia o sinal INT para o seu script; interceptando isso é uma simples questão de pegar esse sinal.

Um exemplo colocando tudo junto:

trap 'echo special command' INT

while read -N 1 foo; do
    echo normal command
done

E uma amostra de interação (eu bati x duas vezes, e depois Ctrl - C uma vez):

xnormal command
xnormal command
^Cspecial command

(Note que este script será chato para sair; uma maneira seria pare com - Z e depois mate o trabalho.

    
por 15.10.2015 / 22:02