4

このコマンド ラインのリダイレクト操作が bash によって明らかに無視されるのはなぜですか? 私は、標準エラーを標準出力にリダイレクトしてから、すべてを無効にすることを目指しています。

( cd ../src/ && python -m SimpleHTTPServer 8000 2>&1 > /dev/null ) &

wget が無効なリンクをチェックできるように、いくつかの静的 Web コンテンツで SimpleHTTPServer を実行しています。ただし、wget ログ ファイルには必要なすべての情報が含まれているため、サーバーからのエラー (失敗したページの要求) は表示したくありません。

それにもかかわらず、これを実行すると...

( cd ../log/ && wget --quiet --spider --recursive -o spider.log http://localhost:8000/ 2>&1 > /dev/null )

...バックグラウンドで実行されている元の SimpleHTTPServer コマンドは、失敗したリソース要求に関する標準エラー レポートを吐き出し続けます。

127.0.0.1 - - [28/May/2013 17:22:31] "GET /technology/actuator.html HTTP/1.1" 200 -
127.0.0.1 - - [28/May/2013 17:22:31] code 404, message File not found
4

2 に答える 2

6

まず、stdout(1) と stderr(2) の両方が端末を指します。

次に、stderr を stdout が指すものにリダイレクトします。(これがターミナルです。)

その後、stdout を にリダイレクトし/dev/nullます。しかし、stderr はまだ端末を指しています。

逆の方法で行うこともできます>/dev/null 2>&1。この方法では、最初に stdout をリダイレクトし/dev/null、次に stderr を同じものにリダイレクトします。

Bash はこれを簡略化&>/dev/nullしたものです。

于 2013-05-28T16:42:24.310 に答える
2

&>/dev/nullすべてを抑制するために使用します。

于 2013-05-28T16:37:18.850 に答える