Unixライクなシステムでは、2つの出力パスがあり、変更しないままにしておくと画面に出力が送信されます。標準エラー(またはstderr)は、ほとんどの障害とエラー状態をキャプチャするものです。
stderrの許可拒否メッセージを「通常の出力」と同じ出力ストリームに渡すには、2つを組み合わせる必要があります。この例ではgrep -v
、適切に操作するために、stdout(標準出力)とstderrを表示される難解な構文と組み合わせます。
GNU Bashのマニュアルのセクション3.2.2パイプライン:
「|&
」を使用すると、command1の標準エラーが標準出力に加えて、パイプを介してcommand2の標準入力に接続されます。それは略記です2>&1 |
。この標準エラーの標準出力への暗黙的なリダイレクトは、コマンドで指定されたリダイレクトの後に実行されます。
また、geirhaが指摘しているように、stderrの出力を単に取り除きたい場合は、次のようなことをしたいと思うでしょう。
find -name 'myfile.*' 2> /dev/null
多分
find -name 'myfile.*' 2> /tmp/errorlog
またfind
、出力を渡すなど、コマンドの文字列がある場合は、コマンドのxargs
パイプライン全体をかっこで囲んで、コマンドのすべてのコンポーネントからの出力をキャプチャする必要があります。例えば、
(find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 ) 2> /dev/null
括弧を省略し、代わりにこれを行った場合-
find | egrep ^[RS].[0-9]+/.svg] | xargs head -1 2> /dev/null
findまたはegrepからのアクセスが拒否されたエラーが表示されますが、stderrはxargsにリダイレクトされます。
これまで見てきたように、テスト実行中に内容を表示した後にのみstderrを破棄する可能性があります。
GNU find
と、私が知る限り、POSIX準拠find
の-print
オプションは暗黙的であることに注意してください。必要に応じて明示的に指定することもできます。