Вывод программы трубопровода на меньшее не показывает начало вывода
Я пытаюсь make
объединить файлы в моем каталоге, но файлы генерируют ~ 200 строк ошибок, поэтому они слишком быстро пролетают мимо моего терминала, и я должен прокручивать их, чтобы прочитать их.
Я хотел бы передать вывод, который отображает на экране пейджер, который позволит мне прочитать ошибки, начиная с самого начала. Но когда я пытаюсь
make | less
less
не отображает начало вывода - он отображает конец вывода, который обычно выводится на экран, а затем сообщает мне, что выход имеет длину 1 строку. Когда я пытаюсь ввести Gg
, единственная строка на экране - это строка исполняемого файла makefile, и обычный выход на экран исчезает.
Я неправильно использую less
? Я никогда раньше не использовал его, и у меня возникают подобные проблемы с чем-то вроде sh myscript.sh | less
, где он не сразу отображает начало выходного файла.
Ответы
Ответ 1
Ошибки из make
появляются в стандартном потоке ошибок (stderr
в C), который не перенаправляется обычными трубами. Если вы хотите, чтобы он перенаправлялся на less
, вам нужно либо make |& less
(csh, и т.д.), Либо make 2>&1 | less
(sh, bash и т.д.).
Ответ 2
Выход ошибки отправляется в несколько другое место, которое не попадает на обычные конвейеры, поскольку вы часто хотите видеть ошибки, но не смешивать их с данными, которые вы собираетесь обрабатывать дальше. Для таких вещей вы используете перенаправление:
$ make 2>&1 | less
В bash
и zsh
(и csh
/tcsh
, из которого они взяли его) это можно сократить до
$ make |& less
С такими вещами, как make
, которые подвержены большому количеству ошибок, я захочу проверить позже, я обычно записываю вывод в файл, а затем less
этот файл позже:
$ make |& tee make.log
$ less make.log