-1

I bash コマンドを実行すると、STDERR はどこにありますか。結果をファイルに記録しないと、STDOUT と STDERR の両方が同時に画面に表示されます。

4

4 に答える 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 に答える