É 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
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?
É 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
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
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:
bash
, não sh
, por causa de read -n
. /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. 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
Tags bash sh shell-script