如何在bash中从历史记录中删除单个命令

7

在网上搜索后,我发现以下命令可以从bash历史记录中删除单个条目:

$ history -d <number>

假设我想从我的历史记录中删除这一行,因为我拼错了git:

10003 gti add . && git commit -m

当我执行以下命令时:
$ history -d 10003

即使我重新启动终端,历史记录中仍然显示这个命令。有什么办法可以解决这个问题吗?因为我经常使用自动完成,特别是在使用Git时,有时会变得有些混乱。请注意保留HTML标签。

3
你可能还需要从历史记录文件中删除该条目,通常位于 ~/.bash_history - Benjamin W.
谢谢,解决了问题! - Timothy
2个回答

5
通过从~/.bash_history中删除命令来解决问题。

3

Bash中的命令历史记录在内存中保存,通常用于当前shell会话,并且在磁盘上默认保存在~/.bash_history。默认的历史记录配置可能会在会话终止时将内存会话追加到磁盘文件中,但是有很多可以调整的参数。

要永久删除历史记录中的命令,在运行history -d <number>之后,您可以运行history -w。这会将内存会话和任何对旧历史记录的编辑都写回到~/.bash_history文件中。

您也可以直接编辑~/.bash_history文件。只要在这种情况下不运行history -w,当当前Bash会话退出时,旧命令将不会被更改。

有关历史设置的一些参考:

  • HISTFILE – 历史记录保存的文件(默认为~/.bash_history
  • HISTFILESIZE – 历史记录文件中存储的命令数量(默认为HISTSIZE
  • HISTSIZE – (内存中)历史记录列表中存储的命令数量(默认为500)
  • cmdhist – 将多行命令保存在单个历史记录条目中的shell选项
  • histappend – shell选项,用于控制是否将历史记录列表追加到历史记录文件中,或者覆盖历史记录文件
  • lithist – 使用换行符而不是分号存储多行命令的shell选项

Unix & Linux Stack Exchange 网站上的 this answer 中建议使用 -w 选项。


1
是的,我确实从~/.bash_history中删除了该命令。不过还是谢谢你提供额外的信息。 - Timothy
如何更改这些设置? - SherylHohman
1
@SherylHohman 你可以直接设置变量;shell选项是使用shopt -s <option>设置的。这通常发生在 ~/.bashrc 中。 - Benjamin W.
https://www.gnu.org/software/bash/manual/bash.html#The-Shopt-Builtin - SherylHohman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接