有时我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)。