ストリームを継続的に読み取るスクリプト

ストリームを継続的に読み取るスクリプト

時々私はcat流れるのが好きです/dev/input/event0

より多くの出力があるたびに何かを実行するスクリプトを作成したいと思います。

一度に1バイトずつ読み込むには、より多くの出力を定義できます。

では、どうすればいいですか?これを行うコマンドはありますか?

答え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

関連情報