【问题标题】:Why does bash behave different by only changing the row how the parsers are called?为什么 bash 通过仅更改调用解析器的行来表现不同?
【发布时间】:2014-10-09 12:49:45
【问题描述】:

我在 bash 上的命令中偶然发现了一个有趣的点,我无法想象为什么会发生这种差异。 抱歉,我没有在谷歌、档案等上进行任何搜索——因为我只是不知道要搜索什么......

这是我的问题的一些测试数据:http://nopaste.info/fdec0d967d_nl.html 这里有两个提示和不同的输出 - 我打算做的是查看示例数据的开始和结束:

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 是如何工作的 :)

谢谢大家! 弗洛里安

【问题讨论】:

标签: bash head tail


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多