如何从历史列表中排除命令,但将其保留在“实时”历史记录中?

如何从历史列表中排除命令,但将其保留在“实时”历史记录中?

同时,由于你们提供了有关 中HISTIGNORE选项的精彩提示,我成功地使我的历史记录变得更加清晰.bashrc,省略了所有那些毫无意义的内容lldf -k行。

然而,我也了解到这个HISTIGNORE选择非常多限制性的, 也。例如,如果您有这样的行(简化)

HISTIGNORE='ll*:la*:cd*'

你不仅会把这些排除在外列表,但也出于你的“活生生的历史”因为我想命名您可以通过Cursor up/访问的易失历史记录Cursor down。尝试一下:无论您使用所述光标键在命令历史记录中循环多长时间,它们现在都将被完全忽略。

然而,有时我需要这些行,特别是对于我不想重新输入的又长又复杂的路径。另一方面,我想要这些行独家的我的生活历史,而不是将它们存储在历史中列表因为它们会经常改变。

有什么办法可以做到这一点吗?

作为另一个旁注,我发现由于某种原因,“实时”历史和历史列表有时会不同很多(参见为什么使用相同的用户和历史命令会得到不同的结果)。

答案1

您可以使用HISTIGNORE环境变量。

以冒号分隔的模式列表,用于决定哪些命令行应保存在历史列表中。例如:

export HISTIGNORE="cd*:ls*"

这将忽略历史记录中的所有 cd 和 ls 命令。

编辑:

抱歉,在我第一次阅读时,我没有充分考虑你的问题。顺便说一句,你是对的:HISTIGNORE这是一个非常困难的设置,并且 bash_history 将简单地忽略此变量中列出的每个命令(它将在你执行它时忽略它,如果这些命令已经存在到你的条目中,HISTFILE它们将是通过历史反向搜索找到。

首先回答你的最后一个问题,如果您同时使用不同的终端,实时历史和书面历史可能会有很大差异。您可以尝试如下所述的解决方案:

在多个终端窗口中保留 bash 历史记录

您可以想象一个解决方案,其中您使用文件中的函数~/.bash_logout,这将删除您不想要的历史记录条目。

像这样的事情应该做你想做的:

 function clear_history(){
    # hist_ignore regex, this may be done in a more fancy way, 
    # such as using an env variable, but anyway
    MYHISTIGNORE='^cd:^view:^cat'

    # write down history to file
    history -w

    # create a new tmp file for history
    tmpFile=$(mktemp)
    cp ${HISTFILE}  ${tmpFile}

    # use it to filter history
    for myRegex in $(echo $MYHISTIGNORE | awk 'BEGIN{FS=":"}{for (i=1;i<=NF;i++){print $i}}'); do 
       sed -i "/${myRegex}/d" ${tmpFile}
    done

    # and copy it back to history file
    mv ${tmpFile} ${HISTFILE}
}

答案2

3 种可能的选择

时间不够了 - 欢迎指正

0) 设置别名以允许您临时将每个命令保存到历史记录中

别名 histsave='$HISTIGNORE && HISTIGNORESAVED=$HISTIGNORE;希斯蒂尼诺=“”; echo "保存历史记录中的所有命令"' # 历史记录全部保存

alias histignore='$HISTIGNORESAVED && (HISTIGNORE=$HISTIGNORESAVED; echo "不保存:历史记录中的 $HISTIGNORES 命令"; exit(0)) || echo "I got nutn."' # 历史忽略一些

1) 在第二个 bash 会话中输入复杂的命令。

设置别名:alias histig='HISTIGNORE=""'

在一个终端中。右键单击并水平/垂直分割或以其他方式在同一位置启动新会话。

直方图

输入复杂命令 # 通常会保存在历史记录中

可选:

History -w # 使用history -r保存以供其他终端会话使用

2)存储复杂命令作为一次性的使用评论

在命令前面加上 # 前缀,使其成为注释:

点击:Home,#,输入。现在它已经进入你的历史了。

点击:向上键、home、删除(#)、输入...来运行命令。

优点:

允许您的历史记录通常排除您的 HISTIGNORE 设置。可以通过 grep History for '#' 来查找这些特别有用的命令。

解决方法:

如果您在历史记录中保存命令,则可以使用“##”。

缺点:

您将保存该命令,即使它第一次没有按要求/预期工作。

其中一些可能不适合你== YMMV

相关内容