I bash コマンドを実行すると、STDERR はどこにありますか。結果をファイルに記録しないと、STDOUT と STDERR の両方が同時に画面に表示されます。
質問する
227 次
4 に答える
2
リダイレクトを指定しない限り、両方とも端末に接続されます。
次のようなものを試してください
ls -l /proc/self/fd
シェルに関連付けられたファイル記述子が表示されます
total 0
lrwx------ 1 user group 64 Feb 11 14:16 0 -> /dev/pts/8
lrwx------ 1 user group 64 Feb 11 14:16 1 -> /dev/pts/8
lrwx------ 1 user group 64 Feb 11 14:16 2 -> /dev/pts/8
于 2013-02-11T19:18:50.863 に答える
0
いいえ、必ずしもそうとは限りません。少なくとも理論的には、stdout(ファイル記述子1)とstderr(ファイル記述子2)は異なります。stdoutはバッファリングされますが、stderrはバッファリングされません。アイデアは、バッファがstdoutに対してより効率的であるということですが、エラーはバッファによって遅延されるべきではありません。これら2つが同期しなくなる可能性はありますが、可能性は低いです。
実際には、端末システムはラインバッファリングを使用し、「\ n」(改行)を追加するとstdoutバッファがフラッシュされるため、問題が発生することはめったにありません(ただし、「まれに」は「決して」と同じではありません)。
Cからは、ファイル記述子(fd)0(stdin)に書き込み、fds 1および2から読み取ることができます。これは、ターミナルドライバーが入力/出力しか知らないためです(人々を混乱させます)。
于 2013-02-12T08:34:32.070 に答える
0
これは簡単にテストできます。
$ echo 'stdout'
stdout
$ echo 'stderr' >/dev/stderr
stderr
于 2013-02-11T19:16:42.473 に答える