如果我运行I bash命令,我在哪里可以找到STDERR。如果我不将结果记录在文件中,STDOUT和STDERR是否会同时显示在屏幕上。
答案 0 :(得分:2)
除非您指定重定向,否则它们都将连接到您的终端。
尝试类似
的内容ls -l /proc/self/fd
您将看到shell的相关文件描述符
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
答案 1 :(得分:1)
您无法“找到”stdout
或stderr
。默认情况下,它们会重定向到屏幕。
您可以将它们重定向到文件,例如:
将stdout
重定向到ls-l.txt
:
ls -l > ls-l.txt
将stderr
重定向到grep-errors.txt
grep da * 2> grep-errors.txt
将stdout
重定向到stderr
:
grep da * 1>&2
所有这些都在这里得到了很好的解释:http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
答案 2 :(得分:0)
这很容易测试:
$ echo 'stdout'
stdout
$ echo 'stderr' >/dev/stderr
stderr
答案 3 :(得分:0)
不,不一定。至少在理论上,stdout(文件描述符1)和stderr(文件描述符2)是不同的。 stdout 缓冲,stderr不是。这个想法是缓冲区对stdout更有效,但错误不应该被缓冲区延迟。可能会使这两个不同步,但不太可能。
在实践中,终端系统使用行缓冲,附加“\ n”(换行符)将刷新stdout缓冲区,因此问题很少发生(尽管“很少”与“never”不同)。
从C可以