Bash

如何將標準錯誤重定向到標準輸出然後管道(apt-cache)

  • October 29, 2020

我試圖重定向stderrstdout然後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

好的,讓我們重定向stderrstdout

$ 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

沒有

如何重定向stderrstdout那時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

引用自:https://unix.stackexchange.com/questions/617073