我不止一次不小心运行了一些命令并污染了我的 bash 历史记录。如何关闭终端而不保存 bash 历史记录?我正在使用费多拉。
答案1
有多种方法可以实现这一目标。
注意:这些选项是不是相互排斥;它们可以任意组合使用,也可以同时使用。
选项0
删除HISTFILE
shell 变量。
unset HISTFILE
根据手册页,这将删除 shell 自动将任何历史记录写入文件的能力,无论您HISTFILE
在取消设置后是否进行了设置。
选项1
如果您是一个完美主义者,在处理混乱的历史文件方面,那么您可以做的就是修改变量HISTIGNORE
以包含您不想记录的命令集。例如,如果您添加HISTIGNORE='ls*:cd*'
到您的~/.bashrc
then 的任何实例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
不知道为什么你这么关心你的命令历史记录。如果您经常需要某些命令,那么如果您为它们定义别名,这样您就可以通过两次击键取回它们,而不必在历史记录中查找它们,那么您可能会更有趣。