Bash
如何將標準錯誤重定向到標準輸出然後管道(apt-cache)
我試圖重定向
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
?
那是因為
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