私はしばしば次の簡単なコマンドのためにイライラしています。
find / | fgrep somestuff.ext
使用しないと、sudo
権限が拒否された行が引き続き表示されます。これは公平ですが、grepがパイプから読み取ったときにこの出力が無視されないのはなぜですか?
この形式の出力がパイプに渡されるのではなく、ターミナルウィンドウに直接送信され(これが起こったと思われる)、その後grepによって無視されるのはなぜですか? catによって同じ行が生成されますが(許可拒否メッセージが保存されていると仮定)text)ファイルはパイプに正しく入り、私のgrepパターンでは無視されますか?
STDIN / STDOUTプロセスに私が理解していないものがあるようです。
ベストアンサー1
許可拒否メッセージは、stdoutではなくfind
stderrに送信されます。 stderr全体をビットバケットにリダイレクトできます。
find 2>/dev/null | fgrep somestuff.ext
また、特定のファイルを見つけるためにgrepは必要ありません。
find . -name somestuff.ext
それでも申請できます2>/dev/null
。
許可拒否メッセージのみを表示したくない場合は、次のものを使用できます。
2> >(grep -v 'Permission denied' >&2)
バッシュから。