2011-04-03 61 views
13

我想make我的目錄中的一堆文件,但這些文件正在生成〜200行錯誤,所以他們飛過我的終端屏幕太快,我必須向上滾動才能閱讀它們。管道程序輸出到較少不顯示輸出的開始

我想將屏幕上顯示的輸出傳輸給傳呼機,讓我從頭開始讀取錯誤。但是,當我嘗試

make | less 

less不顯示輸出的開始 - 它會顯示這通常通過管道輸送到屏幕上的輸出端,然後告訴我,輸出爲1線長。當我嘗試輸入Gg時,屏幕上的唯一行是執行的makefile的行,並且常規屏幕輸出消失。

我錯誤地使用less?我以前沒有真正使用過,而且我遇到類似的問題,例如sh myscript.sh | less,它不會立即顯示輸出文件的開頭。

回答

13

來自make的錯誤出現在標準錯誤流(C中的stderr)中,該錯誤不會被普通管道重定向。如果你想讓它重定向到less,你需要make |& less(csh等)或make 2>&1 | less(sh,bash等)。

+0

Acccha,我認爲它與此有關,但我試過'make |少於2>&1'。有重定向在錯誤的地方。 – 2011-04-03 01:39:37

+0

請您簡單介紹一下'2>&1'和'|&'做什麼? – winklerrr 2017-04-04 10:23:04

9

錯誤輸出被髮送到一個稍微不同的地方,這個地方沒有被正常的管道捕獲,因爲你經常想看到錯誤,但沒有將它們與你將要處理的數據混合在一起。對於這樣的事情,你使用重定向:

$ make 2>&1 | less 

bashzsh(和csh/tcsh,這是他們從借來的),則它可以縮短到

$ make |& less 

用之類的東西make這很容易產生很多錯誤,我會在稍後檢查,我通常將輸出捕獲到文件中,然後less該文件稍後:

$ make |& tee make.log 
$ less make.log 
+0

我試過在bash中使用'make |&less',但是我得到了一個語法錯誤。 – 2011-04-03 21:32:04

+0

Hrm,看起來像舊''bash'沒有它; OSX上的系統'bash'(3.2)不接受它,而是來自MacPorts的'bash' 4,而Maverick上的標準'bash'也是如此。 – geekosaur 2011-04-03 21:43:16