我正在尝试重定向stderr
到stdout
它pipe
,但我认为我在这里遗漏了一些基本的东西。
要通过管道传输的命令和输出:
$ apt-cache show contractor
N: Can't select versions from package 'contractor' as it is purely virtual
N: No packages found
Grep 不起作用 - 必须输出到stderr
:
$ apt-cache show contractor |grep virtual
好的,让我们重定向stderr
到stdout
:
$ apt-cache show contractor 2>&1 |grep virtual
不,这不起作用,为什么?
确认命令正在使用哪个文件描述符:
$ apt-cache show contractor 1>t ;cat t
$ apt-cache show contractor 2>t ;cat t
N: Can't select versions from package 'contractor' as it is purely virtual
N: No packages found
确认正在使用stderr
。
与重定向的顺序有关吗?
$ apt-cache show contractor |cat 2>&1
没有
$ apt-cache show contractor 2>&1 |cat 2>&1
没有
如何重定向stderr
到stdout
那时pipe
?
答案1
这是因为apt-cache
当它的标准输出不是 tty 时,它将变得“安静”并且不会打印这些行。
您可以通过将其“安静度”设置为 0 来覆盖该确定:
$ apt-cache -q=0 show contractor 2>&1 | grep virtual
N: Can't select versions from package 'contractor' as it is purely virtual