stderr和stdout的行为不同

时间:2019-09-10 07:24:04

标签: c++ stdout ksh stderr tcsh

当通过tcshksh运行时,

stdout和stderr给出不同的结果。 据我了解,ksh中的行为是正确的,而在tcsh中则是错误的。 我的目的是了解coutcerr之间的区别,因此我编写了一个小型c ++程序:

    std::cout<<"this goes in standard output\n";
    std::cerr<<"This goes in error output\n";

并产生out作为其中的可执行文件。

我制作了两个shell脚本,一个用于ksh,另一个用于tcsh,如下所示:

:~/CPP/TEST [124]$ cat test
#!/bin/tcsh

      out 2>>error.log

:~/CPP/TEST [125]$ cat test1
#!/usr/bin/ksh

out 2>>error.log

:~/CPP/TEST [129]$ ./test
This goes in error output            //WRONG
:~/CPP/TEST [130]$ cat error.log
this goes in standard output         //WRONG
:~/CPP/TEST [131]$ ./test1
this goes in standard output         //OK
:~/CPP/TEST [132]$ cat error.log
this goes in standard output
This goes in error output            //OK

stderrstdout的行为在各个shell上是否应该相同吗?

1 个答案:

答案 0 :(得分:3)

根据this tcsh manual page,您需要使用>>&重定向错误输出(以及标准输出)

该手册也指出

  

如果没有其他命令,shell目前无法重定向诊断输出   重定向标准输出,但是(command >> output-file) >& error-file   通常是可以接受的解决方法。

总而言之,在tcsh中,实际上没有办法将错误输出仅重定向到文件。