重启后恢复终端窗口

vla*_*don 5 command-line

是否有任何本机或第三方工具可以恢复所有打开的终端窗口及其路径和命令行历史记录?

(不是休眠,我在重启后需要这个(例如,在内核更新后)。)

Ubuntu 15.04,Unity 外壳。

小智 1

首先我不知道有这样的东西存在。其次,这不是完整的答案,只是部分答案,但我不能仅发表评论答案。

我已经完成了其中的一部分,打开一个 gnome 终端来恢复先前终端会话的命令历史记录(我用它来在漫长的软件测试期间捕获命令)。您不需要单独捕获历史记录,只需指定终端应使用哪个文件即可。将此脚本命名为“myterm”:

#/bin/bash

TERMDIR=~/.myterms
if [ ! -d $TERMDIR ] ; then
    mkdir $TERMDIR
fi

TERMUID=$1
if [ -z "$TERMUID" ] ; then
    # generate unique id for new terminal
    TERMUID="`basename \`tty\``-`date +'%s'`"
fi

HISTFILE=$TERMDIR/$TERMUID gnome-terminal
Run Code Online (Sandbox Code Playgroud)

因此,执行不带参数的 myterm 将在 TERMDIR 中放置一个新的历史文件。如果稍后您使用 TERMDIR 中的文件名之一作为参数执行 myterm,它将恢复该终端的历史记录。如果您有一组固定的终端,您也可以省去随机 uid 生成,而只使用固定名称。

我知道你想做的远不止于此,但我不清楚一个要求 - 如果你手动关闭终端,你需要忘记它吗?即删除其历史记录并且不在登录时重新打开?这可能有点棘手,因为我不确定如何检测手动关闭而不是注销或关闭期间的强制关闭。

通过扫描 TERMDIR 在登录时重新打开终端非常简单;即历史文件的存在标记需要该终端。

更困难的是更改到最后一个工作目录。每个子终端在关闭时都通过 $PWD 知道其目录,但 ofc myterm 无法读取子环境以将其写入存储。不过,如果已知的话也没有问题;只需使用

HISTFILE=$TERMDIR/$TERMUID gnome-terminal --working-directory somedir
Run Code Online (Sandbox Code Playgroud)

您可能需要编写一个在用户会话期间运行的监视器

  1. 检测终端何时关闭并删除其历史记录
  2. 定期检测工作目录并存储它

根据您的要求。