加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 为什么从文件中获取stdin与通过管道接收stdin不同?

发布时间:2020-12-16 01:16:11 所属栏目:安全 来源:网络整理
导读:使用bash我经常想得到一个大型csv文件的标题,并搜索其余的特定条目.我这样做如下. $(head -1; grep mike) tmp.csvname,age,favourite colourmike,38,blue 但是从cat或任何其他命令获取输入不起作用 – 似乎grep永远不会传递文件的其余部分. $cat tmp.csv | (
使用bash我经常想得到一个大型csv文件的标题,并搜索其余的特定条目.我这样做如下.
$(head -1; grep mike) < tmp.csv
name,age,favourite colour
mike,38,blue

但是从cat或任何其他命令获取输入不起作用 – 似乎grep永远不会传递文件的其余部分.

$cat tmp.csv | (head -1; grep mike)
name,favourite colour

为什么这两种情况会有不同的行为?

从管道读取和从文件读取之间的区别在于,您可以查看文件,但不能查看管道.

这里的行为看起来(通过strace看到)就像它来自头部而不是bash. head将读取缓冲区并找到适当数量的行,然后向后lseek到最后输出行结束的点,使文件句柄在该位置打开.如上所述,如果它正在读取文件,则会起作用,但如果它正在从管道读取则不行.

我想不出除了你正在做的事情,除了头脑中的这种行为是有道理的,但事实就是如此.我每天都在学习新东西,我告诉你……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读