如何让终端在每个选项卡/窗口中保留单独的历史记录?


12

当我重新启动Mac时,它会退出并正确保存每个选项卡的缓冲区,因为当计算机重新启动时它会再次出现。但是每个窗口/选项卡都没有正确缓冲命令历史记录。它们都是相同的缓冲区。

我假设它是因为bash使用相同的 ~/.bash_history 对于所有终端,但是有办法 避免 改善这个?要制作bash或者终端,可以单独存储它们吗?


请参阅 这个帖子 @ Server Fault,它解释了如何做到这一点。
Mutant

Answers:


7

你可以在你的身上做这样的事情 .bashrc

MYTTY=`tty`
HISTFILE=$HOME/.bash_history_`basename $MYTTY`

这将在您的主目录中创建单独的历史文件,例如 .bash_history_ttys002。创建新的终端窗口时,它将使用与tty名称对应的历史文件,通常只能通过创建终端窗口的顺序来确定。


十分感谢!将此标记为已解决。尽管它取决于OSX如何加载终端,但我觉得这是我们能得到的最接近的。
Robert Sköld

这也是可能的每个标签?
Joshua Muheim

每个选项卡都是一个单独的tty登录,所以它应该工作。
Seth Noble

终端明确支持这种类型的行为:当它创建一个新终端时,它会为终端分配一个唯一的ID,并通过TERM_SESSION_ID环境变量将其传递给终端会话。当它恢复Resume的终端时,它还恢复相同的会话ID,因此程序可以使用它来将任意状态与恢复的终端相关联。将此作为文件名的一部分而不是tty。
Chris Page

@ChrisPage这个问题是每次启动窗口/选项卡时会话都不同。因此,它会创建单独的历史记录,而不是跨会话链接它们。
Rene Wooller

4

我通过添加实现了这个

export HISTFILE="$HOME/.bash_history_$TERM_SESSION_ID"
if [ ! -e $HISTFILE ]; then cp "$HOME/.bash_history" "$HISTFILE"; fi

对我的 ~/.bash_profile 文件。现在,当我关闭终端并再次打开它时,每个选项卡都会恢复其单独的命令历史记录。此外,当我创建新选项卡时,将初始化默认历史记录 .bash_history

还要做 Terminal 应用程序保留退出和重新启动之间打开的选项卡,您需要确保该选项 "close windows when quitting app" (on Yosemite) 被禁用了 System Preferences -> General


0

您可以为每个终端实例设置自定义$ HISTFILE。


有没有办法自动为每个终端选项卡/窗口执行此操作?并确保它使用相同的 $HISTFILE 什么时候电脑开始备份?
Robert Sköld

1
是的,可以这样做,但那你又怎么会访问?您需要手动处理文件以获取以前的历史文件。
EmmEff

@EmmEff Terminal明确支持这种类型的行为:当它创建一个新终端时,它会为终端分配一个唯一的ID,并通过TERM_SESSION_ID环境变量将其传递给终端会话。当它恢复Resume的终端时,它还恢复相同的会话ID,因此程序可以使用它来将任意状态与恢复的终端相关联。
Chris Page
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.