屏幕上是否印有stderr和stdout?

时间:2013-02-11 19:13:34

标签: bash

如果我运行I bash命令,我在哪里可以找到STDERR。如果我不将结果记录在文件中,STDOUT和STDERR是否会同时显示在屏幕上。

4 个答案:

答案 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)

您无法“找到”stdoutstderr。默认情况下,它们会重定向到屏幕。

您可以将它们重定向到文件,例如:

  • 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可以写入到文件描述符(fd)0(stdin)和读取来自fds 1和2,因为终端驱动程序只知道输入/输出(混淆了人们的地狱)。