Вывод программы с меньшим значением не отображает начало вывода - PullRequest
15 голосов
/ 03 апреля 2011

Я пытаюсь make кучу файлов в моем каталоге, но файлы генерируют ~ 200 строк ошибок, поэтому они слишком быстро пролетают мимо экрана моего терминала, и мне приходится прокручивать их вверх, чтобы прочитать их.

Я бы хотел направить вывод, отображаемый на экране, на пейджер, который позволит мне прочитать ошибки, начиная с самого начала.Но когда я пытаюсь

make | less

less не отображать начало вывода - он отображает конец вывода, который обычно передается на экран, а затем говорит мне, что вывод составляет 1 строку.Когда я пытаюсь набрать Gg, единственная строка на экране - это строка исполняемого файла makefile, и обычный вывод на экран исчезает.

Я неправильно использую less?Я никогда не использовал его раньше, и у меня возникают похожие проблемы с чем-то вроде sh myscript.sh | less, когда он не сразу отображает начало выходного файла.

Ответы [ 2 ]

16 голосов
/ 03 апреля 2011

Ошибки от make появляются в стандартном потоке ошибок (stderr в C), который не перенаправляется обычными каналами. Если вы хотите, чтобы он также был перенаправлен на less, вам нужно либо make |& less (csh и т. Д.), Либо make 2>&1 | less (sh, bash и т. Д.).

11 голосов
/ 03 апреля 2011

Вывод ошибок отправляется в немного другое место, которое не отслеживается обычными конвейерами, поскольку вы часто хотите видеть ошибки, но не смешивать их с данными, которые собираетесь обрабатывать дальше. Для таких вещей вы используете перенаправление:

$ make 2>&1 | less

В bash и zshcsh / tcsh, откуда они его позаимствовали) это можно сократить до

$ make |& less

С такими вещами, как make, которые могут вызывать множество ошибок, которые я захочу проверить позже, я обычно записываю вывод в файл, а затем less этот файл позже:

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