我通常会打开多个 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 并运行它。