如何在不保存历史记录的情况下关闭终端?

36 bash command-history

我不止一次不小心运行了许多命令并污染了我的 bash 历史记录。如何在不保存我的 bash 历史记录的情况下关闭我的终端?我正在使用 Fedora。

amp*_*ine 36

简短的回答:

在提示符下输入:

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

这将立即杀死您的 shell,而 shell 无法执行任何操作,例如捕获信号、保存历史记录、执行~/.bash_logout、警告停止的作业或任何其他好东西。

长答案:

注意:这些选项并不相互排斥;它们可以同时使用。

选项1:

如果您在处理历史文件时是一个完美主义者,那么您可以做的是修改HISTIGNORE变量以包含您不想记录的命令团。例如,如果您将HISTIGNORE='ls*:cd*'和 的~/.bashrc任何实例添加到您的历史文件中lscd则不会插入到您的历史文件中。

选项 2:

如果您想逐个命令地控制哪些命令被排除在历史记录之外,您可以设置HISTCONTROL='ignorespace'which 将省略任何以空格开头的命令行。使用ignoreboth也会省略重复的行。然后,在输入命令之前按空格键将导致它不会出现在您的历史文件中。

选项 3:

如果您只是想让它在关闭终端时外壳立即退出,您可以trap通过终端程序发送外壳的信号(xterm例如发送SIGHUP然后等待外壳退出)并退出而不保存历史记录接收到这个信号。将此添加到您的~/.bashrc

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
Run Code Online (Sandbox Code Playgroud)

  • 我不认为在其他一切都失败的可怕情况下推广使用 `kill -9` 是一个好主意。 (7认同)
  • +1 表示'kill -9 $$' 方法。这当然是解决 HISTIGNORE 等设置为只读的情况的一种方法。 (2认同)
  • 发送 SIGKILL _从不_一个好主意作为标准操作程序。使用正确的程序,例如取消设置 HISTFILE。 (2认同)
  • 如果您不小心在 shell 中输入了密码并按 Enter 键(预计会出现密码提示),则执行“kill -9 $$”是理想的选择。 (2认同)

Gil*_*il' 31

您的 shell 的历史记录保存在由HISTFILE变量指示的文件中。所以:

unset HISTFILE
Run Code Online (Sandbox Code Playgroud)

这也适用于 zsh,但不适用于 ksh,ksh 会一直保存到$HISTFILEshell 启动时指示的文件中(相反,您决定在启动 shell 后将历史记录保存在 ksh 中)。