为什么bash的行为不同,只是改变了行的语法分析器的调用方式?

为什么bash的行为不同,只是改变了行的语法分析器的调用方式?,bash,head,tail,Bash,Head,Tail,我在bash上的命令中遇到了一个有趣的问题,我无法想象为什么会出现这种差异。 很抱歉,我没有在谷歌、档案等网站上进行任何搜索,因为我不知道要搜索什么 以下是我的问题的一些测试数据: 这里有两个提示和不同的输出-我打算做的是查看示例数据的开始和结束: 2014/10/09 14:49:01 HilgenbF ~/working_files/_temp$ cat test.txt | ( head -n 10; tail -n 10 ) Started at : Sa

我在bash上的命令中遇到了一个有趣的问题,我无法想象为什么会出现这种差异。 很抱歉,我没有在谷歌、档案等网站上进行任何搜索,因为我不知道要搜索什么

以下是我的问题的一些测试数据: 这里有两个提示和不同的输出-我打算做的是查看示例数据的开始和结束:

2014/10/09 14:49:01 HilgenbF ~/working_files/_temp$ cat test.txt | ( head -n 10; tail -n 10 )
        Started at         : Samstag, 4. Oktober 2014, 23:22:43
        Started at         : Donnerstag, 2. Oktober 2014, 15:18:29
        Started at         : Samstag, 27. September 2014, 23:22:38
        Started at         : Montag, 22. September 2014, 21:00:58
        Started at         : Samstag, 4. Oktober 2014, 09:03:38
        Started at         : Samstag, 27. September 2014, 11:28:32
        Started at         : Samstag, 20. September 2014, 10:31:31
        Started at         : Samstag, 13. September 2014, 10:33:12
        Started at         : Samstag, 6. September 2014, 10:03:59
        Started at         : Montag, 1. September 2014, 09:01:33
        Started at         : Samstag, 13. September 2014, 23:23:16
        Started at         : Samstag, 4. Oktober 2014, 23:22:42
        Started at         : Dienstag, 30. September 2014, 18:45:10
        Started at         : Samstag, 27. September 2014, 23:22:38
        Started at         : Samstag, 20. September 2014, 23:30:08
        Started at         : Samstag, 4. Oktober 2014, 23:22:42
        Started at         : Mittwoch, 1. Oktober 2014, 10:09:00
        Started at         : Samstag, 27. September 2014, 23:22:38
        Started at         : Sonntag, 21. September 2014, 10:26:58
        Started at         : Montag, 22. September 2014, 09:10:42
2014/10/09 14:49:05 HilgenbF ~/working_files/_temp$ cat test.txt | ( tail -n 10; head -n 10 )
        Started at         : Samstag, 13. September 2014, 23:23:16
        Started at         : Samstag, 4. Oktober 2014, 23:22:42
        Started at         : Dienstag, 30. September 2014, 18:45:10
        Started at         : Samstag, 27. September 2014, 23:22:38
        Started at         : Samstag, 20. September 2014, 23:30:08
        Started at         : Samstag, 4. Oktober 2014, 23:22:42
        Started at         : Mittwoch, 1. Oktober 2014, 10:09:00
        Started at         : Samstag, 27. September 2014, 23:22:38
        Started at         : Sonntag, 21. September 2014, 10:26:58
        Started at         : Montag, 22. September 2014, 09:10:42
我知道我可以简单地使用第一个工作示例,但我真的很好奇bash是如何工作的:

谢谢大家! Florian

tail-n10不只是消耗最后10行输入;为了找出最后10行是什么,它消耗了所有的数据。因此,在第二个示例中,head命令没有任何内容可供读取


在第一个示例中,head不需要读取整个输入,因为它可以在读取到足以输出前十行时立即停止读取。然而,也不能保证head只读取它输出的内容。例如,head-c 5将只输出前5个字符,但可能需要至少读取一整行5个以上的字符才能找到它们。

Wow-thx对@chepner来说太多了-这很快:-