在Mathematica中,可以通过使用%重用前一个命令的输出。在bash中使用先前命令的输出
类似可能bash的东西(或其他一些壳)?
例如,我运行生成赋予警告,但我想找到所有警告。 所以,我键入
make | grep "warning"
,但我没能看到make的输出即可。
我想是这样,而不是键入内容:
make
% | grep "warning"
在Mathematica中,可以通过使用%重用前一个命令的输出。在bash中使用先前命令的输出
类似可能bash的东西(或其他一些壳)?
例如,我运行生成赋予警告,但我想找到所有警告。 所以,我键入
make | grep "warning"
,但我没能看到make的输出即可。
我想是这样,而不是键入内容:
make
% | grep "warning"
由于输出的数量是不确定的,它没有任何意义了bash
将其保存为您重新显示。但是有一个替代的解决方案,您的问题:
的tee
命令,可以复制的输出流的文件。所以,如果你愿意使用临时存储照片的文件,你可以这样做:
make | tee output.txt
grep "warning" output.txt
该解决方案避免了两次运行make
,这可能是:(a)昂贵和(b)不一致:第二make可能比第一次做的工作少,因为有些目标已经第一次出现了。
注意:我没有试过这个。您可能需要加入错误和输出流等。
我不知道,如果make
命令将警告发送到标准错误,但我怀疑它。试试这个
make 2&>1 |grep 'warning'
它会将stderr重定向到标准输出。
还应注意,你不能用grep什么这不会到标准输出。
如果用发球来复制输出流到/ 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
交换stdout
和stderr
流记录整个stderr
流:
make 3>&2 2>&1 1>&3 3>&- | tee /dev/stderr > stderr.log
权。它实际上没有意义存储整个输出。但是tee命令似乎很有用。 我试了一下。完美的作品。谢谢。 – Harsh 2010-07-21 09:44:06