仅当使用 Ctrl + R 时从多个 bash 会话中搜索历史记录,而不是使用箭头键时

仅当使用 Ctrl + R 时从多个 bash 会话中搜索历史记录,而不是使用箭头键时

我通常会打开多个 bash 会话。我希望在进行搜索时显示多个会话的历史记录(使用 Ctrl + R)。当使用箭头键时,仅应显示当前 bash 会话的历史记录。

许多 stackexchange 问题都与存储多个会话的历史记录有关。我已经使用它,但我的需求略有不同。

答案1

首先,如果不重新实现 shell(在本例中为 bash)处理历史记录的一些关键组件,就没有一个干净的解决方案来解决您的问题。下面是一个维护本地历史记录的解决方案,以便箭头按预期工作。 Ctrl-r 反过来必然会搜索您的全局历史记录。该解决方案依赖于一个出色的实用程序,用于搜索您的历史记录,称为呵呵。以下是设置所有内容的说明。

添加到启动文件~/.profile~/.bash_profile或者~/.bashrc

# Whenever a command is executed, write it to a global history
export PROMPT_COMMAND="history -a ~/.bash_history.global"

# On C-r run the swap_history_reverse.sh script, 
bind -x '"\C-r": "~/swap_history_reverse.sh"'

创建以下脚本~/swap_history_reverse.sh

#! /usr/bin/env bash

# Point hh to global history
export HISTFILE=~/.bash_history.global

# Reverse search
hh

# Restore local history
export HISTFILE=~/.bash_history 

使脚本可执行:

chmod +x ~/swap_history_reverse.sh

安装hh,参见安装

一切就绪后,打开一个新 shell 并运行它。

相关内容