在bash中使用前面的命令的输出

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

是什么类似的可能为bash(或其他一些shell)?

例如,我运行了一个警告,但我想find所有的警告。 所以,我input

make | grep "warning" 

但是我无法看到make的输出。

我想input这样的东西,而不是:

 make % | grep "warning" 

Solutions Collecting From Web of "在bash中使用前面的命令的输出"

由于输出量是不确定的,因此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 

交换stdoutstderr流以记录整个stderr流:

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