如何自动捕获终端输出到文件

如何自动捕获终端输出到文件

我知道我可以用来script捕获在终端窗口中写的所有内容,只要我运行以下命令:

export NOW=$(date +%Y%m%d-%H%M%S)
/usr/bin/script ~/history/output/$NOW.shell.out

这里最大的问题是每次打开终端窗口时都需要手动干预——当有人从你身后推搡时,很容易忘记这一点。如果我尝试将这些命令放在 的末尾.bashrc,则输出文件将被创建并在.bashrc运行完成后关闭,从而终止script执行。将 放在&行末以在后台运行会使它script保持运行,但它与终端断开连接,因此不会写入任何内容。

我还知道我可以使用例如Select All终端Edit菜单从回滚缓冲区复制并将其写入文件 - 除非出现故障。我遇到的故障模式包括:

  1. exit当您认为您处于子 shell 中时在命令提示符下键入内容- 因此当终端退出时回滚缓冲区就会消失。
  2. 终端崩溃(例如,由于具有无限的回滚缓冲区而memcpy失败,导致 SEGFAULT),因此每个打开的窗口的回滚缓冲区都会消失
  3. Close当您想要按下MidnightCommander 按钮时却按下了终端按钮Close,而主管认为这将是一个更好的工具 - 回滚缓冲区就会消失
  4. 笔记本电脑电池耗尽,笔记本电脑关闭,并且多个终端回滚缓冲区同时消失

我尝试将终端配置为在启动时运行自定义命令,但没有任何效果:

export NOW=$(date +%Y%m%d-%H%M%S); /usr/bin/script /path/to/home/history/output/$NOW.shell.out
bash | tee /path/to/home/history/output/$(date \+\%Y\%m\%d-\%H\%M\%S).shell.out

(在后一种情况下,当我接近完成工作时,我最终得到了一个$(date在输出目录中命名的文件 - 但它仍然是一个零长度的文件。)

我正在寻找一种方法,script每次启动登录会话时(例如,打开终端窗口时)自动启动类似程序,将一个唯一命名的日志文件写入我的output目录,这样当终端遇到阻止我保存回滚缓冲区的错误时,我有更好的机会避免数据丢失。

答案1

将问题顶部指定的两个命令放入 shell 脚本中。将脚本放入/path/to/home/bin/recorder(当然文件需要可执行,并且不要忘记#!/bin/sh在开头插入)。

然后编辑 gnome-terminal 中的默认配置文件,并将启动时运行的命令设置为/path/to/home/bin/recorder,然后将“命令结束时要做什么”选项设置为“保持终端打开”(抱歉,我使用的是不同语言版本的 Ubuntu,因此您窗口中显示的实际英文描述可能略有不同)。我刚刚检查了一下,它对我有用。

相关内容