스트림을 지속적으로 읽는 스크립트

스트림을 지속적으로 읽는 스크립트

때때로 나는 cat흐르는 것을 좋아합니다 /dev/input/event0.

더 많은 출력이 있을 때마다 뭔가를 수행하는 스크립트를 작성하고 싶습니다.

한 번에 한 바이트씩 읽으려면 더 많은 출력을 정의할 수 있습니다.

그럼 우리는 어떻게 해야 합니까? 이를 수행하는 명령이 있습니까?

답변1

쉘 스크립트에서는 완전한 행으로 제한됩니다. 좀 더 세밀하게 읽으려면 C/Perl/Python 등을 사용해야 합니다.

while read line; do
  # do something based on content of $line; remember to quote it
done </dev/input/event0

답변2

geekosaur의 답변 변형: 한 번에 1바이트씩 읽은
다음 .read -n 1 byte$byte

편집하다:

이전에 해당 명령을 사용한 적이 없기 때문에 이것을 시도해 보았지만( find info bash) 모든 공백과 줄 끝을 씹어먹는 것 같습니다. 이에 대해서는 아직 설명이 없습니다.

명령 매개변수를 세부 조정하려면 다음 스크립트를 사용해 보십시오.

(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)

불행하게도 이는 예상한 결과를 제공하지 않습니다.

편집(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)

이는 정확히 예상된 결과입니다. 참고: , , , 또는 를
사용하더라도 결과는 변경되지 않습니다. 텍스트의 경우 Chris가 말하는 0x00 및 0xff 제한을 테스트하지 않았습니다.-n-N-rN

관련 정보