2010-07-21 53 views
7

在Mathematica中,可以通过使用%重用前一个命令的输出。在bash中使用先前命令的输出

类似可能bash的东西(或其他一些壳)?

例如,我运行生成赋予警告,但我想找到所有警告。 所以,我键入

make | grep "warning" 

,但我没能看到make的输出即可。

我想是这样,而不是键入内容:

make 
% | grep "warning" 

回答

8

由于输出的数量是不确定的,它没有任何意义了bash将其保存为您重新显示。但是有一个替代的解决方案,您的问题:

tee命令,可以复制的输出流的文件。所以,如果你愿意使用临时存储照片的文件,你可以这样做:

make | tee output.txt 
grep "warning" output.txt 

该解决方案避免了两次运行make,这可能是:(a)昂贵和(b)不一致:第二make可能比第一次做的工作少,因为有些目标已经第一次出现了。

注意:我没有试过这个。您可能需要加入错误和输出流等。

+0

权。它实际上没有意义存储整个输出。但是tee命令似乎很有用。 我试了一下。完美的作品。谢谢。 – Harsh 2010-07-21 09:44:06

2

我不知道,如果make命令将警告发送到标准错误,但我怀疑它。试试这个

make 2&>1 |grep 'warning' 

它会将stderr重定向到标准输出。

还应注意,你不能用grep什么这不会到标准输出。

2

如果用发球来复制输出流到/ dev /标准错误,没有必要为一个临时文件;此外,在此之后,您可以使用sed过滤stdout流以创建make_warning.log文件 - 全部在Unix shell管道的一行中。

make 2>&1 | tee /dev/stderr | \ 
    sed -E -n 's/(.*[Ww][Aa][Rr][Nn][Ii][Nn][Gg].*)/\1/p' > make_warning.log 
2

交换stdoutstderr流记录整个stderr流:

make 3>&2 2>&1 1>&3 3>&- | tee /dev/stderr > stderr.log