我有一个bash脚本,它只调用不同的调用并将stdout和stderr输出重定向到不同的文件。
我做到了这一点:
command 1> datafile 2>> errorfile
但是,当命令错误时(例如,作为参数给出的用户名和密码组合错误),错误消息不会重定向到错误文件。我运行此脚本时仍然在屏幕上看到错误消息。例如,错误消息表明我提供了错误的用户名和密码组合。
我做错了什么? 我以为我应该在屏幕上看不到输出,因为我将stdout和stderr重定向到文件。
答案 0 :(得分:6)
也许程序不是写入stderr,而是直接打开/ dev / tty与用户通信?这种方法在密码交互方面相当普遍:尽管有任何重定向,软件仍希望确保密码提示能够“通过”给用户。
如果是这种情况,你需要伪终端技巧来安排输出结束文件。
如果你没有该软件的来源,你可以使用strace / truss来找出该程序的真正用途。
答案 1 :(得分:-1)
您的重定向命令错误。使用bash,试试这个:
$ cat redir.c
#include <stdio.h>
int main(void) {
fprintf(stdout, "Hello stdout\n");
fprintf(stderr, "Hello stderr\n");
}
$ ./redir > txt 2>&1
$ cat txt
Hello stderr
Hello stdout
$
'2&gt;&amp; 1'是捕获stderr的关键。
答案 2 :(得分:-2)
看起来你有一个额外的'&gt;'在你的stderr重定向。尝试:
command 1> datafile 2> errorfile
编辑:正如评论中指出的,2&gt;&gt;重定向stderr,附加到文件,而2>覆盖文件。
我保留这个答案以供参考。