持续读取流的脚本

持续读取流的脚本

有时我cat喜欢流/dev/input/event0

我想编写一个脚本,每次有更多输出时都会执行某些操作。

更多输出的定义可能是每次读取一个字节。

那怎么办呢?有什么命令可以做到这一点吗?

答案1

在 shell 脚本中,您将被限制为完整的行。您需要使用 C/Perl/Python/任何语言来进行更细粒度的阅读。

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

答案2

geekosaur 答案的一种变体:
您可能想尝试read -n 1 byte一次读取一个字节,然后使用$byte.

编辑:

只是尝试了这个,因为我以前从未使用过该命令(只是查找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)

不幸的是,这并没有给出预期的结果。

编辑(在克里斯的帮助下):

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

这正是预期的结果。
注意:无论我使用-n-N、 还是-rN不改变结果,都很好(对于文本,我没有测试 Chris 谈论的限制:0x00 和 0xff)。

相关内容