Como posso fazer o stdin ser sempre consumido?

3

Alguns programas não lêem de stdin (como dmesg ou adb logcat ). Eu costumo pressionar Return algumas vezes para fornecer uma separação entre linhas de log. Quando eu interrompo o comando diretamente no shell, tudo funciona satisfatoriamente.

No entanto, quando os programas terminam eles mesmos (porque a conexão para adb logcat é perdida por exemplo), o shell inicia o processamento de todas as linhas que eu digitei. Isso geralmente é assim:

user@host$ 
user@host$ 
user@host$ 
user@host$ 
user@host$ # I broke something here
user@host$ 
user@host$ 
user@host$ 
user@host$ TODO LOOK AT THIS
bash: TODO: command not found
user@host$ 
user@host$ 
user@host$ 
user@host$ 
user@host$ 
user@host$ # adb is about to get killed...
user@host$

Como você pode entender, ter o Bash executando todas essas linhas é completamente inútil e muda a última saída restante. Existe uma maneira de consumir stdin mesmo quando o processo termina?

    
por Lekensteyn 28.11.2013 / 00:07

1 resposta

3

Isso parece funcionar:

dmesg -Hw; read -t .01 -d ""

Este comando irá (após dmesg ter terminado) executar o Bash built-in read para consumir toda a entrada (sem delimitador em vez de uma nova linha, -d "" ). O argumento -t .01 faz com que o comando de leitura atinja o tempo limite após 0.01 segundos, para que o comando retorne rapidamente.

    
por 28.11.2013 / 00:22

Tags