我知道我可以用来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
菜单从回滚缓冲区复制并将其写入文件 - 除非出现故障。我遇到的故障模式包括:
exit
当您认为您处于子 shell 中时在命令提示符下键入内容- 因此当终端退出时回滚缓冲区就会消失。- 终端崩溃(例如,由于具有无限的回滚缓冲区而
memcpy
失败,导致 SEGFAULT),因此每个打开的窗口的回滚缓冲区都会消失 Close
当您想要按下MidnightCommander 按钮时却按下了终端按钮Close
,而主管认为这将是一个更好的工具 - 回滚缓冲区就会消失- 笔记本电脑电池耗尽,笔记本电脑关闭,并且多个终端回滚缓冲区同时消失
我尝试将终端配置为在启动时运行自定义命令,但没有任何效果:
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,因此您窗口中显示的实际英文描述可能略有不同)。我刚刚检查了一下,它对我有用。