简而言之:

简而言之:

我正在尝试弄清楚如何分叉/克隆保留其父级历史记录的终端。

我知道有一些解决方案可以让所有终端共享历史记录,但这并不是我想要的。

有时我在某个目录中工作时意识到我需要一个额外的终端 - 但仍然希望轻松访问该终端中的命令历史记录,而无需在其父终端之间来回切换。

注意:一旦子终端生成,两个终端就无需继续更新彼此的历史记录。

例子:

  • 在终端 1 中执行的超长奇怪命令
  • 需要额外的航站楼-2号航站楼已进入游戏。
  • 过了一段时间,我终于在 1 号航站楼启动了 nano
  • 需要来自 1 号航站楼的超长命令 - 但幸运的是它在 2 号航站楼的历史记录中!

答案1

简而言之:

要打开具有与当前会话相同的完整历史记录的新终端窗口,请运行:

 history -a && gnome-terminal

完整解释:

Bash 历史记录的工作方式如下:

  • 打开一个终端,启动一个 Bash 会话。
  • Bash 从 加载旧历史记录$HISTFILE,通常是~/.bash_history
  • 您可以在 Bash shell 中输入命令。这些命令将存储在内存中的临时历史记录中。
  • 退出 Bash 会话或关闭终端窗口。
  • 在 Bash 终止之前,它会将内存中的临时历史记录与$HISTFILE磁盘上保存的历史记录同步。

请注意,临时历史记录和持久历史记录都可能有大小限制,并且当它们变得太长时会被截断。

由于每个 Bash 实例仅在您的内存中写入临时历史记录,因此如果您并行启动第二个会话,则正在运行的会话中的操作不会出现:它将加载持久历史记录文件的旧版本!


如果需要同步两个 Bash 实例的临时历史记录,则需要通过持久历史记录文件执行此操作。有一个命令可以帮助您:history

  • $HISTFILE要通过将新命令行附加到当前 Bash 会话的临时历史记录从 RAM 刷新到磁盘,请运行:

     history -a
    

    此命令会自动调用,只要您退出 Bash 会话

  • 要从磁盘重新读取$HISTFILE并将其中的新命令行添加到当前 Bash 会话的临时历史记录中以供使用,请运行:

     history -r
    

    此命令会自动调用,只要您启动 Bash 会话

请注意两个命令前面的空格history。它可以防止命令history本身出现在 Bash 历史记录中。如果希望它出现在那里,只需省略开头的空格即可。


因此,要打开一个可以访问所有当前历史记录的新终端窗口,您需要先清除当前临时历史记录,然后使用新的 Bash 会话打开一个新终端:

 history -a && gnome-terminal

再次注意开头的空格,以防止此命令出现在历史记录中。如果希望它出现在那里,请省略命令前面的空格。

如果您想要一个简短的命令,请创建一个 Bash 别名:

echo "alias newterminal='history -a && gnome-terminal'" >> .bash_aliases

如果需要,您还可以向 Gnome-Terminal 启动器添加上下文菜单项。如果需要,请在评论中提出请求。


要同步两个已打开的终端窗口的历史记录,首先刷新第一个窗口的历史记录,然后在第二个窗口中重新加载历史记录文件:

  • 1 号航站楼(来源):

     history -a
    
  • 2 号航站楼(目标):

     history -r
    

如果需要双向同步,首先history -a在所有窗口上运行命令,然后在所有history -r地方运行。


history执行时可以找到有关该命令的更多信息

help history

相关内容