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

时间:2012-07-06 16:56:14

标签: bash

这里有很多线程讨论如何为脚本或cmdline执行此操作(主要涉及管道,重定向,tee)。 我没有找到的是一个可以设置一次然后只是全局工作的解决方案,无需操作单个脚本或向每个命令行添加内容。

我想要实现的是在最佳答案中描述的内容 How do I write stderr to a file while using "tee" with a pipe?

是否可以配置bash会话以便将所有stderr输出记录到文件中,同时仍将其写入控制台?我可以添加到.bashrc中的东西,因此每次登录时都会自动设置?

软件:Bash 4.2.24(1)-release(x86_64-pc-linux-gnu),xterm,Ubuntu 12.04

1 个答案:

答案 0 :(得分:0)

在@ 0xC0000022L之前的解决方案中尝试此变体(将其放在.bash_profile中):

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

有几点需要注意:

  1. 提示和您在命令行输入的任何内容都会打印到stderr,因此会记录在您的文件中。

  2. 换行符可能存在问题,终止未在终端中显示的命令;我在我的Linux主机上观察它,但在Mac OS X笔记本电脑上没有。也许其他人可以解释和/或解决问题。例如,如果我输入“echo stdout”,我会看到以下内容:

    $ echo stdoutstdout
    $