linux中head方法单独取一行,Linux head实用程序只读取一行需要更多输入才能退出...

我需要逐行读取连续数据流(实际上是管道),我需要在第一行之后退出.在第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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值