tcsh
和ksh
运行时, stdout和stderr给出不同的结果。
据我了解,ksh
中的行为是正确的,而在tcsh中则是错误的。
我的目的是了解cout
和cerr
之间的区别,因此我编写了一个小型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
stderr
和stdout
的行为在各个shell上是否应该相同吗?
答案 0 :(得分:3)
根据this tcsh
manual page,您需要使用>>&
重定向错误输出(以及标准输出)
该手册也指出
如果没有其他命令,shell目前无法重定向诊断输出 重定向标准输出,但是
(command >> output-file) >& error-file
通常是可以接受的解决方法。
总而言之,在tcsh
中,实际上没有办法将错误输出仅重定向到文件。