次のコマンドがあります。
find / -name libGL.so.1
「Permission denied」で多くの行を返します。そのような行を除外したいので、以下を追加しました:
find / -name libGL.so.1 | grep -v 'denied'
しかし、出力は同じです-私のgrep -v 'denied'
はPermission denied
で行をフィルタリングしていません。私は多くのバリエーションを試し、grepチュートリアルを調べましたが、問題を理解できません。助言がありますか?
それはgrep
とは関係ありません-パイプ|
が標準出力ストリームstdout
をリダイレクトするのに対し、Permission denied
メッセージは標準エラーストリームstderr
。 2>&1
(2
のストリームをファイル記述子が1
のストリームにリダイレクトする)を使用してストリームを組み合わせることにより、stderr
およびstdout
はgrepコマンドの入力にパイプされます
find / -name libGL.so.1 2>&1 | grep -v 'denied'
ただし、stderr
を/dev/null
にリダイレクトして完全に破棄するのが一般的です。
find / -name libGL.so.1 2>/dev/null
Bashのmanページを見ると、この言い回しに気付くでしょう:
|&
を使用すると、コマンドの標準エラーがパイプを介してcommand2の標準入力に接続されます。2>&1 |
の短縮形です。
したがって、STDERRとSTDOUTを結合したい場合も、この構成を使用できます。
find / -name libGL.so.1 |& grep -v 'denied'
コマンドは次のようになります。
find / -name libGL.so.1 2>/dev/null
Findは標準エラー(fd2)のパーミッションについて不満を言っています。これらの行を削除するには、ビットバケット(/ dev/null)に標準出力をリダイレクト(>)します。
"permission denied"行はstderr(標準エラー)ストリームに送られますが、grepを介してstdout(標準出力)をパイプしています。
あなたはstderrを完全に離れてリダイレクトすることができます
find / -name libGL.so.1 2> /dev/null
Sudoでコマンドを呼び出してみましたか?
Sudo find / -name libGL.so.1
それでもメッセージが表示される場合は、前述のstderr(fd = 2)からnirvana(/ dev/null)へのリダイレクトを使用します。
Sudo find / -name libGL.so.1 2> /dev/null
その他のアイデア ここ 、頑張ってください!