2014-10-09 59 views
2

我在bash的一個命令中偶然發現了一個有趣的點,我無法想象爲什麼發生了這種差異。 很遺憾,我沒有執行對谷歌,檔案等任何搜索 - 因爲我只是不知道該怎麼尋找...爲什麼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的作品:)

謝謝大家! Florian

+0

哇 - thx很多@chepner - 這是快速:-) http://stackoverflow.com/a/26278987/4091332 – Fet32 2014-10-09 13:16:56

回答

4

tail -n 10不僅僅消耗其輸入的最後10行;它會消耗全部它爲了找到最後10行是什麼。因此,在第二個示例中,head命令無法讀取。

在第一個示例中,head不需要讀取整個輸入,因爲只要讀取的內容足以輸出前十行,就可以停止讀取。但是,也不能保證head只讀只有它輸出的內容。例如,head -c 5只會輸出前5個字符,但可能需要閱讀至少一個超過5個字符的完整行才能找到它們。

相關問題