Script que continua lendo um fluxo

7

Às vezes, eu cat um fluxo como /dev/input/event0 .

Eu quero escrever um script que faça algo sempre que houver mais resultados.

A definição de mais saída pode ser toda vez que se lê um byte.

Como isso pode ser feito? Existe algum comando que faça isso?

    
por Chao Xu 05.03.2011 / 03:16

2 respostas

5

De um script de shell, você estará limitado a linhas completas. Você precisará usar C / Perl / Python / whatever para uma leitura mais detalhada.

while read line; do
  # do something based on content of $line; remember to quote it
done </dev/input/event0
    
por 05.03.2011 / 03:28
3

Uma variação na resposta do geekosaur:
Você pode querer que read -n 1 byte leia um byte de cada vez, então faça algo com $byte .

EDITAR:

Apenas tentei isso, pois nunca tinha usado esse comando antes (apenas procurei info bash ), mas parece eliminar todos os espaços em branco e terminações de linha. Eu não tenho uma explicação para isso ainda.

Experimente os seguintes scripts para ajustar os argumentos do comando:

(for j in $(seq 1 10); do for i in $(seq 1 100); do echo -n "$i, "; sleep .02; done; echo "& $j."; done) | (while read line; do echo $line; done)

(for j in $(seq 1 10); do for i in $(seq 1 100); do echo -n "$i, "; sleep .05; done; echo "& $j."; done) | (while read -n 1 byte; do echo -n "$byte"; done)

Então, infelizmente, isso não dá o resultado esperado.

EDIT (com a ajuda de Chris):

(for j in $(seq 1 10); do for i in $(seq 1 100); do echo -n "$i, "; sleep .02; done; echo "& $j."; done) | (while IFS= read -N 1 byte; do echo -n "$byte"; done)

Isso dá exatamente o resultado esperado.
Nota: se eu uso -n , -N ou -rN não altera o resultado, está tudo bem (com texto, eu não testei a limitação que o Chris fala: 0x00 e 0xff).

    
por 05.03.2011 / 05:03

Tags