管道程序输出为less不会显示输出的开头

Kev*_*rke 16 unix pipe

我正在尝试make在我的目录中的一堆文件,但文件生成〜200行错误,所以他们飞过我的终端屏幕太快,我必须向上滚动阅读它们.

我想将屏幕上显示的输出传输到寻呼机,让我从头开始读取错误.但是,当我尝试

make | less
Run Code Online (Sandbox Code Playgroud)

less不显示输出的开头 - 它显示通常通过管道输出到屏幕的输出结束,然后告诉我输出为1行长.当我尝试输入时Gg,屏幕上的唯一一行是执行的makefile行,常规屏幕输出消失.

我使用less不正确吗?我之前没有真正使用它,而且我遇到了类似的问题,sh myscript.sh | less它没有立即显示输出文件的开头.

Jer*_*ock 17

错误make出现在标准错误流(stderr在C中),不会被正常管道重定向.如果你想将它重定向到less,你需要make |& less(csh等)或make 2>&1 | less(sh,bash等).


gee*_*aur 12

错误输出被发送到一个稍微不同的地方,这个地方没有被正常的管道捕获,因为你经常想看到错误,但没有将它们与你将要进一步处理的数据混合在一起.对于这样的事情,你使用重定向:

$ make 2>&1 | less
Run Code Online (Sandbox Code Playgroud)

bashzsh(和csh/ tcsh,这是他们借来的地方),这可以缩短为

$ make |& less
Run Code Online (Sandbox Code Playgroud)

对于make容易产生大量错误的事情我想稍后检查,我通常会将输出捕获到文件,然后less将该文件捕获:

$ make |& tee make.log
$ less make.log
Run Code Online (Sandbox Code Playgroud)