Bash 通过T形三通将锉刀穿过尾部和头部
从开始,我尝试读取一个文件,并发出文件的头部和尾部(仅读取一次文件) 我尝试了以下方法:Bash 通过T形三通将锉刀穿过尾部和头部,bash,shell,tee,Bash,Shell,Tee,从开始,我尝试读取一个文件,并发出文件的头部和尾部(仅读取一次文件) 我尝试了以下方法: tee>(head)>(tail)>/dev/null(head)| tail(head)| tail(head)(head>&3)&1 我认为头的输出不受管道的影响,只有tee的输出受管道的影响。我创建了一个编号为1..100的文件,然后尝试了tee>(head-n3)
tee>(head)>(tail)>/dev/null
这行代码按预期工作,但我想去掉/dev/null。所以我试着:
tee>(head)| tail
但是这条线并没有像预期的那样工作(好吧,正如我预期的那样),它打印头部,但之后不会返回。显然尾巴在等什么。但我不知道到底为什么。
我找到了这个,但我无法用给定的答案运行它。在tee>(head)| tail
中,文本文件直接转到tail
。你可能是说
tee >(head) < text.txt | tail
tee>(head)
它不需要等待任何东西,但也不起作用,因为T形三通和头部的输出都指向尾部
将头部的输出重定向到一个新的文件描述符,然后将其取回可以工作,但我不确定它是否比使用/dev/null“更干净”:
( tee >(head >&3) < text.txt | tail) 3>&1
(tee>(head>&3)&1
我认为头的输出不受管道的影响,只有tee的输出受管道的影响。我创建了一个编号为1..100的文件,然后尝试了tee>(head-n3)zsh
进行测试,它提出了自己的一系列(离题)问题:)哦,天哪。不,它不起作用。为了查看shell的并发性,我创建了一个有1M行(75MB)的文件。现在,该命令不再像预期的那样工作(tail发射15k左右的线)。管道提前关闭了吗?有什么想法吗?请看后续报道。