如何关闭终端而不保存历史记录?

如何关闭终端而不保存历史记录?

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

答案1

有多种方法可以实现这一目标。

注意:这些选项是不是相互排斥;它们可以任意组合使用,也可以同时使用。

选项0

删除HISTFILEshell 变量。

unset HISTFILE

根据手册页,这将删除 shell 自动将任何历史记录写入文件的能力,无论您HISTFILE在取消设置后是否进行了设置。

选项1

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

该变量extglob在打开时遵循:

shopt -s extglob
# With `extglob` on I can use extended globs to ignore all:
# cd ..
# cd ../
# cd ..//
# cd ../..
# cd ../../
# cd ../..//
# etc.
HISTIGNORE='cd +(..|../)*(/)'

这将忽略cd ..、、cd ../cd ../..但离开cd myfolder

有关扩展 glob 的更多信息可以在bash 手册页

选项2

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

# With HISTCONTROL=ignorespace (or =ignoreboth) this line gets written to history
$ mycommand
# But this line does not
$  mycommand

选项3

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

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP

选项4

虽然有些人可能认为这是“野蛮”方法,但发送SIGKILL到您的 shell 的 PID 会立即杀死您的 shell,而 shell 无法执行此操作任何事物例如捕获信号、保存历史记录、执行~/.bash_logout、警告已停止的作业或任何好的东西。

$$扩展为执行命令的 shell 进程的 PID)

kill -9 $$

答案2

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

unset HISTFILE

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

答案3

我很惊讶地发现history -c之前没有人提出建议exit。 IINM(我不是专家)会做得很好。

答案4

不知道为什么你这么关心你的命令历史记录。如果您经常需要某些命令,那么如果您为它们定义别名,这样您就可以通过两次击键取回它们,而不必在历史记录中查找它们,那么您可能会更有趣。

相关内容