Entrada padrão do Bash flush antes de uma leitura

6

Existe uma maneira fácil no bash de liberar a entrada padrão?

Eu tenho um script que é comumente executado, e em um ponto do script leia é usado para obter informações de o usuário. O problema é que a maioria dos usuários executa esse script copiando e colando a linha de comando da documentação baseada na Web. Eles freqüentemente incluem alguns espaços em branco, ou pior, alguns dos textos que seguem o comando de amostra. Eu quero ajustar o script para simplesmente se livrar do lixo extra antes de exibir o prompt.

    
por Zoredache 10.02.2011 / 21:35

1 resposta

3

Este tópico sobre E / S não bloqueantes no bash pode ajudar.

Ele sugere o uso de stty e dd .

Ou você pode usar o bash read incorporado com a opção -t 0 .

# do your stuff

# discard rest of input before exiting
while read -t 0 notused; do
   read input
   echo "ignoring $input"
done

Se você quiser fazer isso apenas se o usuário estiver em um terminal, tente o seguinte:

# if we are at a terminal, discard rest of input before exiting
if test -t 0; then
    while read -t 0 notused; do
       read input
       echo "ignoring $input"
    done
fi
    
por 10.02.2011 / 22:32