-1

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

4

4 回答 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

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

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

  • 重定向stdoutls-l.txt

    ls -l > ls-l.txt
    
  • 重定向stderrgrep-errors.txt

    grep da * 2> grep-errors.txt
    
  • 重定向stdoutstderr

    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 回答