次のコマンドがあります。
find / -name libGL.so.1
「許可拒否」を含む多くの行を返します。この行を除外したかったので、以下を追加しました。
find / -name libGL.so.1 | grep -v 'denied'
ただし、出力は同じです。 mygrep -v 'denied'
はPermission denied
。さまざまなバリエーションを試してgrepチュートリアルを見てみましたが、問題を特定できませんでした。どんな提案がありますか?
ベストアンサー1
これは関係ありませんgrep
。パイプは|
標準出力ストリームをリダイレクトしますstdout
が、Permission denied
メッセージは標準エラーストリームにあるためですstderr
。入力をgrepコマンドにパイプするために、結合されたストリーム2>&1
(ファイルディスクリプタを持つストリームを2
ファイルディスクリプタを持つストリームにリダイレクト)を使用して必要なものを取得できます。1
stderr
stdout
find / -name libGL.so.1 2>&1 | grep -v 'denied'
しかし、より一般的なアプローチは、直接stderr
リダイレクトして完全に削除することです。/dev/null
find / -name libGL.so.1 2>/dev/null
2>&1 |代わりに|&を使用してください。
Bashのマニュアルページを見ると、次の紹介を見ることができます。
使用すると、
|&
コマンドの標準エラーはcommand2の標準入力にパイプされます2>&1 |
。
したがって、STDERRとSTDOUTを接続する場合は、次の構文を使用することもできます。
find / -name libGL.so.1 |& grep -v 'denied'