我需要逐行读取连续数据流(实际上是管道),我需要在第一行之后退出.在第1行之后.听起来很简单,但是,使用“head -n 1”,我注意到我实际上需要在退出前进入第二行.
测试用例:
[s@svr1 ~]$cat | head -n 1
123
123
456
[s@svr1 ~]$
有人可以解释(首先)为什么它会像那样,也许我怎么能得到我需要的东西?
(我想坚持基本的Linux / Unix轻量级构建块.没有Perl,Python等……)
谢谢
解决方法:
因为你正在使用猫| head -n 1,这是一个useless use of cat,与head -n 1不同.如果你在控制台上执行-n 1,你会得到你想要的行为 – head读取一行,打印并退出.
如果你做猫|头-n 1,然后发生这种情况:
> cat从输入中读取“123”.
> cat将“123”写入其输出.
> head从其输入读取“123”(连接到cat的输出).
> head将“123”写入其输出并退出.
> cat从输入中读取“456”.
> cat尝试将“456”写入其输出.
> cat获取SIGPIPE,因为其输出另一端的进程已经死亡.
>猫退出.
只要它写成“123”,猫就会开始另一次阅读,并且它没有发现头已经死了,直到它试图写第二行为止.
标签:bash,linux
来源: https://codeday.me/bug/20190823/1696148.html