Sair do loop se uma tecla for pressionada

0

Eu quero sair do script se qualquer tecla for pressionada.

#!/bin/sh
while true; do
   df -h | head
   sleep 10
   clear
done

Alguma sugestão?

    
por BOUABANE Raed 28.06.2018 / 13:34

3 respostas

0

É melhor você usar o comando watch :

watch -n10 'df -h | head'

Use Ctrl + c para parar o comando.

A página watch man diz:

watch - execute a program periodically, showing output fullscreen

    
por 28.06.2018 / 13:50
0

Substitua sleep 10; por read -t 10 -n 1 exitwhile; if [ -n "$exitwhile" ]; then break; fi

read -t 10 -n 1 exitwhile aguarda 10 segundos para entrada sem confirmação com enter e coloca a entrada na variável exitwhile. se essa variável não estiver vazia, o loop while será interrompido.

... tem que ser modificado, porque só vai quebrar em chaves de caracteres

    
por 28.06.2018 / 13:41
0

Isso sairá em quase todas as chaves:

#!/bin/bash
while true; do
   { clear; df -h | head; } </dev/null
   read -n 1 -t 10 && break
done; read -t 0.1 -n 1000000

Notas:

  • O shebang chama bash , não sh , por causa de read -n .
  • O redirecionamento de /dev/null é para evitar que comandos diferentes de read esgotem o stdin ( clear e df podem não fazer isso, mas em geral os comandos podem). Desta forma, qualquer entrada vai para read eventualmente.
  • O% final% co_de é descartar caracteres excessivos de stdin. Algumas chaves geram mais de um caractere (pesquisa "seqüências de escape"); Também é possível pressionar várias teclas enquanto read (ou qualquer outro comando que você deseja usar) está sendo executado. Sem o% final% co_de esses caracteres extras ficariam na sua linha de comando.

Abordagem alternativa, com df :

#!/bin/bash
watch -n 10 df -h &   # put to the background
read -n 1
kill $!               # kill the the job most recently placed into the background
read -t 0.1 -n 1000000
    
por 28.06.2018 / 14:20