将所有stderr记录到文件和控制台

问题描述:

有大量线程讨论如何为脚本或cmdline(主要涉及管道,重定向,tee)执行此操作。 我没有找到的是一种解决方案,可以设置一次,然后在全局范围内工作,不需要操作单个脚本或向每个命令行添加内容。将所有stderr记录到文件和控制台

我想达到的目标是一样的东西在 How do I write stderr to a file while using "tee" with a pipe?

顶端回答所描述的不是它可以配置bash命令,使所有标准错误输出记录到文件中,同时仍然将其写入安慰?什么我可以添加到.bashrc,并因此每次我登录时自动设置?

软件:猛砸4.2.24(1)-release下(x86_64-PC-Linux的GNU),xterm中,Ubuntu的12.04

+0

你是对的,道歉。我所描述的方法只适用于连接管道,而不是为了您想要的目的。我很茫然。删除了我的答案。 – 0xC0000022L 2012-07-06 17:30:23

+0

我不知道如何做只有'stderr',但我知道如何做所有输出显示。这对你有用吗? – cha0site 2012-07-06 18:05:38

尝试在@ 0xC0000022L以前的解决方案(把它放在你的.bash_profile)这种变化:

exec 2> >(tee log.file > /dev/tty) 

需要注意几个问题:

  1. 你在命令行中键入的提示和任何打印到stderr,因此会在你的文件中记录。

  2. 可能有一个问题,换行符终止命令不显示在您的终端;我在我的Linux主机上观察它,但不是在我的Mac OS X笔记本电脑上。也许别人可以解释和/或解决这个问题。例如,如果我输入“回声标准输出”,我看到以下内容:

    $ echo stdoutstdout 
    $ 
    
+0

附加到'/ dev/tty'以避免丢失换行符(我不知道为什么)。 'exec 2>>(tee -a log.file >>/dev/tty)'您还需要使用'-a'附加到日志文件。 – 2012-07-06 18:38:44

+0

heureka!注意:该文件可能会写入一些延迟。在我的第一次快速测试中,只有在关闭会话后才被刷新。如果我发现任何问题,我会报告回来。谢谢! – 2012-07-07 20:24:58