stderrをstdoutにリダイレクトしてからパイプ(apt-cache)する方法

stderrをstdoutにリダイレクトしてからパイプ(apt-cache)する方法

stderrリダイレクトしようとしていますが、ここに基本的な内容がありませんstdoutpipe

パイプのコマンドと出力:

$ 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までリダイレクトする方法は何ですか?stdoutpipe

答え1

apt-cacheこれは、標準出力がttyでない場合は「静か」になり、行を印刷しないためです。

「Quietness」を0に設定することで、この決定を上書きできます。

$ apt-cache -q=0 show contractor 2>&1 | grep virtual
N: Can't select versions from package 'contractor' as it is purely virtual

関連情報