2011-04-03 30 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