如果我运行 I bash 命令,我在哪里可以找到 STDERR。如果我不将结果记录在文件中,STDOUT 和 STDERR 是否会同时显示在屏幕上。
问问题
227 次
4 回答
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
于 2013-02-11T19:18:50.863 回答
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
于 2013-02-11T19:17:53.267 回答
0
这很容易测试:
$ echo 'stdout'
stdout
$ echo 'stderr' >/dev/stderr
stderr
于 2013-02-11T19:16:42.473 回答
0
不,不一定。至少在理论上,stdout(文件描述符 1)和 stderr(文件描述符 2)是不同的。stdout 是缓冲的,stderr 不是。这个想法是缓冲区对于标准输出更有效,但错误不应该被缓冲区延迟。有可能使这两个不同步,但是不太可能。
实际上,终端系统使用行缓冲,附加“\n”(换行符)将刷新标准输出缓冲区,因此问题很少发生(尽管“很少”与“从不”不同)。
从 C 可以写入文件描述符 (fd) 0 (stdin) 并从 fds 1 和 2读取,因为终端驱动程序只知道输入/输出(把人搞糊涂了)。
于 2013-02-12T08:34:32.070 回答