从多个Konsole保存bash历史记录无法正常工作


9

我使用多个Konsole终端。而且我希望我在每个终端中键入的所有命令都保存在命令历史记录中,以便我打开的下一个konsole拥有所有命令。为了防止每个终端覆盖另一个终端的命令历史记录,我在我的计算机中进行了以下设置.bashrc

# avoid duplicates and commands starting with space
export HISTCONTROL=ignoredups:erasedups:ignorespace
# append history entries..
shopt -s histappend
#My machine reboots without warning sometimes.Hence to save commands instantaneously.
export PROMPT_COMMAND="history -a"  
export HISTSIZE=1000
PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1

我在最后一行给出了提示符,以查看命令号。命令号 从未超过600,但是我的一些旧命令仍然从历史中消失。有很多命令是重复给出的,但是正如从所期望的那样ignoredups,它永远不会在提示符后增加命令no。然而旧的命令仍在消失,历史上的命令数量始终保持在500多一点。

.bash_history尽管忽略了该文件,但该文件仍然包含许多重复项。

PS:echo $HISTSIZE和输出$HISTFILESIZE均为=1000


更新:我在上面的条目中发现了问题.bashrc。只需调用即可history -aPROMPT_COMMAND只需将最后一个新命令附加到.bash_history。所以ignoredupserasedups没有作用。

有什么办法,我仍然可以写.bash_history而不用从每个终端重复吗?我不想在每个命令提示符处加载整个历史记录,history -r然后再用再次写回history -w,因为我在一个终端中发出的命令也会出现在另一个并行运行的终端中。我希望组合的命令仅出现在新终端中。

我的历史为何被修整到500的难题已解决。我注意到每次我进入这台机器时,它都会发生。.bash_profile使用以下条目创建一个即可解决此问题。

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

现在我的.bashrc也会在每次ssh时执行。并且历史文件的大小现在正在单调增加。



不,我想避免Oli列表中的第二个要求。我不希望混淆其他终端的历史记录。直到我启动新终端。这是我正确关闭计算机后自然发生的情况。但是有时无法正确关闭,除非我立即保存历史记录,否则所有这些都将在突然关闭电源后丢失。
indiajoe 2012年

bug-bash这个问题发布一年后,这个问题听起来很像邮件列表:lists.gnu.org/archive/html/bug-bash/2013-07/msg00092.html
语法错误

Answers:


1

我已经得出结论,不可能直接附加新命令,而同时要删除任何重复命令。所以我的解决方案是在一段时间内运行以下命令。或将其放在我的crontab中。

tac $HOME/.bash_history | awk '!seen[$0]++' | tac > $HOME/.hist_Temp 
mv $HOME/.hist_Temp $HOME/.bash_history

上面的命令将保留最后一次出现的命令,并从历史记录文件中删除该命令上方的所有其他重复,而不会弄乱命令的顺序。


0

这很丑陋,我敢肯定sedawk会更好,但是我试图通过在我的代码中添加以下内容来解决相同的问题.bashrc

export HISTFILE=.bash_history_`tty | python -c 'import sys ; sys.stdout.write(sys.stdin.read().strip().replace("/", "_"))'`

这将为您打开的每个终端创建一个单独的历史记录文件,但是,如果您在bash中运行bash,它将使用相同的历史记录,但不应覆盖。根据我的经验,我会警告您。虽然这样做确实可以避免历史记录被覆盖,但您必须使用grep多个文件才能尝试查找所需的历史记录,这有时会很耗时。

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.