使用bash中先前命令的输出

时间:2010-07-21 09:30:56

标签: linux bash shell

在Mathematica中,可以使用%。

重复使用上一个命令的输出

bash(或其他一些shell)有类似的可能吗?

例如,我运行一个发出警告的make,但我想找到所有警告。 所以,我输入

make | grep "warning"

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

我想输入这样的内容:

make
% | grep "warning"

5 个答案:

答案 0 :(得分:11)

由于输出量不确定,因此bash存储它以供重新显示是没有意义的。但是你的问题有另一种解决方案:

tee命令允许您将输出流复制到文件。因此,如果您愿意使用文件进行临时存储,您可以执行以下操作:

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

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

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

答案 1 :(得分:2)

我不确定make命令是否向stderr发送警告但我怀疑它是否存在。试试这个

make 2&>1 |grep 'warning'

它会将stderr重定向到stdout。

还应该注意,你不能grep任何不会stdout的东西。

答案 2 :(得分:2)

如果使用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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

您可以这样做:

lightbox.option({
  'disableScrolling': true
})

通过使用make !! | grep "warning" 告诉它重复该位置的最后一个命令,以及要添加到其中的任何其他bash命令。