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

时间:2011-04-03 01:34:35

标签: unix pipe

我正在尝试make我目录中的一堆文件,但这些文件产生了大约200行错误,所以它们飞过我的终端屏幕太快了,我必须向上滚动才能阅读它们。

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

make | less

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

我是否错误地使用less?我以前从未使用过它,而且我遇到类似sh myscript.sh | less之类的问题,它不会立即显示输出文件的开头。

2 个答案:

答案 0 :(得分:15)

来自make的错误出现在标准错误流(C中的stderr)上,而不是由普通管道重定向。如果您想将其重定向到less,则需要make |& less(csh等)或make 2>&1 | less(sh,bash等)。

答案 1 :(得分:10)

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

$ make 2>&1 | less

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

$ make |& less

make这样容易产生大量错误的东西我想稍后检查,我通常会将输出捕获到一个文件,然后再less该文件:

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