Firefoxから興味のないすべてのメッセージを受け取りました。
Gtk-Message: Failed to load module "pk-gtk-module"
Gtk-Message: Failed to load module "canberra-gtk-module"
だから、firefox
次のように終了して再起動します。
$ firefox 2>&1 > /dev/null &
「リダイレクトstderr
してstdout
両方null
」にパイプします。
残念ながら、その不快なメッセージは消えませんでした。実際、firefox
現在この質問を入力しているセッションを開始した端末ウィンドウは依然として質問を生成しています。
質問は次のとおりです。
上記のリダイレクトが機能しないのはなぜですか?
どうやって正しくリダイレクトしますか?
答え1
これは逆の順序で行う必要があります。まず、stdoutをリダイレクトしてから、stderrをstdoutにリダイレクトします。
firefox >/dev/null 2>&1 &
編集:ここに説明があります。2>&1
ファイル記述子のコピー操作(bashのマニュアルページと検索を参照Duplicating File Descriptors
):「ファイル記述子1と同じ操作を実行するためにファイル記述子2をコピーします」を意味します。その後、fd 2に記録されたすべての内容は、fd 1がその内容を送信した場所に送信されます。したがって、stderr(2)とstdout(1)は同じ場所に書き込まれます。ただし、これらは独立しているため、後でfd 1を変更すると(stdoutをリダイレクトするなど)、fd 2は変更されていません。 fd 1が書き込んでいる位置に記録され続けます。今後最後のリダイレクトです。
最初にstdoutをリダイレクトしてからコピーすると、fd 1とfd 2は両方ともfd 1がリダイレクトされるのと同じ場所に書き込まれます。
デフォルトでは、シェルは左から右にリダイレクト/リピートを実行するため、順序が正しいことを確認する必要があります。
ちなみに、特別なケースでは、bashはstdoutとstderrを同じ場所にリダイレクトするショートカットを提供します。
cmd &> /dev/null
等しい
cmd > /dev/null 2>&1