在Mathematica中,通过使用%可以重复使用前一个命令的输出。
例如,我运行了一个警告,但我想find所有的警告。 所以,我input
make | grep "warning"
但是我无法看到make的输出。
我想input这样的东西,而不是:
make % | grep "warning"
由于输出量是不确定的,因此bash
将其存储以供重新显示是没有意义的。 但有一个替代解决方案,您的问题:
tee
命令允许您将输出流复制到文件。 所以如果你愿意使用一个文件临时存储,你可以做这样的事情:
make | tee output.txt grep "warning" output.txt
这个解决方案避免了两次运行,这可能是(a)昂贵的,(b)不一致的:第二次运行可能比第一次运行更少,因为一些目标已经是第一次运行了。
注意:我没有试过这个。 您可能需要加入错误和输出流等。
我不确定make
命令是否将警告发送到stderr,但是我怀疑它发生了。 尝试这个
make 2&>1 |grep 'warning'
它会将stderr重定向到stdout。
还应该注意,你不能grep任何不会标准输出。
如果使用tee将输出流复制到/ dev / stderr,则不需要临时文件。 此外,可以使用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