如何从历史记录中删除一行?

B S*_*ven 285 command-line shell bash command-history

我在 Mac OSX 上工作,所以我想我在使用 bash...?

有时我会输入一些我不想被历史记住的东西。如何删除它?

jw0*_*013 485

预防措施

如果要运行命令而不将其保存在历史记录中,请在其前面加上一个额外的空格

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space
Run Code Online (Sandbox Code Playgroud)

为此,您需要ignorespaceignorebothHISTCONTROL. 例如,运行

HISTCONTROL=ignorespace
Run Code Online (Sandbox Code Playgroud)

要使此设置持久化,请将其放入您的.bashrc.

验尸清理

如果您已经运行该命令,并希望将其从历史记录中删除,请首先使用

history
Run Code Online (Sandbox Code Playgroud)

显示历史记录中的命令列表。找到要删除的数字旁边的数字(例如 1234)并运行

history -d 1234
Run Code Online (Sandbox Code Playgroud)

此外,如果您要删除的行已经写入您的 $HISTFILE(默认情况下通常会在您结束会话时发生),您将需要写回 $HISTFILE,否则该行将在您打开新文件时重新出现会议:

history -w
Run Code Online (Sandbox Code Playgroud)

  • @jw013 我将 PROMPT_COMMAND 设置为 `history -a`,在这种情况下,它已经写入历史文件,而不是在正常配置下退出。具体:http://mywiki.wooledge.org/BashFAQ/088 (3认同)
  • 它对我不起作用。 (2认同)

小智 68

  1. 要清除所有历史记录,请使用

    history -c
    
    Run Code Online (Sandbox Code Playgroud)
  2. 要删除单行,请使用

    history -d linenumber
    
    Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用。 (12认同)
  • 请注意,您必须启动新的 shell 会话才能使这些更改生效。 (2认同)

小智 17

Mac 上的 Zsh

如果您使用 Zsh,则history -d linenumber无法删除命令行历史记录中的特定行号。但是您可以编辑历史文件。关闭并重新打开终端并编辑历史记录,如下所示:

nano ~/.zsh_history
Run Code Online (Sandbox Code Playgroud)

请参阅了解更多详细信息。


小智 12

我在我的 中有这个~/.bashrc,这使得$ forget命令从历史记录中删除上一个命令

function forget() {                                                              
   history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);              
}
Run Code Online (Sandbox Code Playgroud)

  • `历史| tail -n1` 是 `history` 命令本身,因此删除该数字会得到错误的条目。然而,`history -d $( history | awk 'END{print $1-1}' )` 结合了行选择、字段选择和减法。 (3认同)
  • 有人可以帮助将其移植到 zshell 吗? (2认同)

Bru*_*sky 7

如果你想忘记整个 bash 会话,你可以kill当前的 bash 进程。由于变量$$保存pid当前 shell的变量,您可以执行以下操作:

kill -9 $$
Run Code Online (Sandbox Code Playgroud)


小智 6

您始终可以从中编辑和删除条目~/.bash_history,这在您想要删除一个条目或多个条目时非常有用

  • 当您退出 shell 时,很可能会重新引入这些条目。 (2认同)

小智 5

要从历史文件中删除一行,请使用 -d 选项。例如,如果您想要清除上面场景中输入明文密码的命令,请在历史文件中找到行号并运行此命令。

$ history -d 2038

要删除或清除 bash 历史记录中的所有条目,请使用下面的带有 -c 选项的历史命令。

$ history -c

或者,您可以使用以下命令永久删除文件中所有上次执行命令的历史记录。

$ cat /dev/null > ~/.bash_history

另外,在 Bash 5 中,您还可以删除范围

history -d 511-520

  • 历史 -d 行号对我不起作用。我用的是苹果电脑。 (3认同)