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


33

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

Answers:


25

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

unset HISTFILE

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


我可以在污染历史记录后注销之前使用此功能?及其本届会议的职责?我不需要set HISTFILE下次登录吗?(只说这是正确还是不正确)

@ acidzombie24没错,除非您将更改明确存储在rc文件中,否则不会在会话之间保存对环境变量的更改。
jw013

31

简短答案:

在提示符下键入:

$ kill -9 $$

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

长答案:

注意:这些选项不是互斥的;它们可以一次全部使用。

选项1:

如果您在整理历史文件方面是一个完美主义者,那么您可以做的就是修改HISTIGNORE变量,使其包含不需要记录的命令。例如,如果您添加HISTIGNORE='ls*:cd*'到您的~/.bashrc那么任何实例lscd未插入到你的历史文件。

选项2:

如果要逐个命令控制历史记录中遗漏了哪些命令,则可以设置HISTCONTROL='ignorespace'将省略任何以空格开头的命令行。使用ignoreboth还将省略重复的行。然后,在输入命令之前点击空格键将导致它不会显示在历史记录文件中。

选项3:

如果您只是想这样做,那么当您关闭终端时,shell会立即退出,您可以trap发出信号,让终端程序发送shell(xterm例如,发送SIGHUP然后等待shell退出)并退出,而无需保存历史记录接收到此信号。将此添加到您的~/.bashrc

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

2
为“ kill -9 $$”方法+1。对于HISTIGNORE等设置为只读的情况,这肯定是一种方法。
科里·亨德森

7
我认为,kill -9除了在其他情况都失败了的严峻情况下之外,不要在其他情况下推广使用是个好主意。
ChristofferHammarström'11

1
发送SIGKILL 作为标准操作程序从来不是一个好主意。使用正确的过程,如取消设置HISTFILE。
Arcege

@Arcege TMTOWTDI。
amphetamachine,

我想知道相反的情况-las如何杀死bash以确保它可以保存他的历史-这就回答了我的问题,谢谢。
mveroone '16

3

令我惊讶的是,history -c在此之前没有人提出建议exit。IINM(我不是专家)会做得很好。


2
您处在正确的轨道上:history -r将重新读取历史记录文件,因此保存成为空手。
Simon Richter

刷新历史记录是一个坏习惯... shell历史记录包含许多有关谁做了什么的有用信息。对于您平台上的新手来说,这非常有用(除非您对文档和变更管理有100%的信心)
Franklin Piat 2015年

2

bash使用两个环境变量来确定历史记录文件,并在shell退出时向其写入多少行。

您可以使用以下任意一种丢弃会话的历史记录(在您要从历史记录文件中省略的会话期间设置):

HISTFILE=/dev/null

要么

HISTSIZE=0

这些都可以在Fedora上的Bash中正常工作


1

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


0
  1. Eli已经给您Bash正确的答案了HISTSIZE=0

  2. 我只需要为GNU屏幕添加方法即可。按Ctrl+A(屏幕退出顺序),然​​后按:scrollback 0。这将删除回滚历史记录。现在,您可以立即:scrollback 15000重新设置回滚缓冲区的大小。


OP何时说他们正在使用screen(1)
amphetamachine

他没有。但是,您可能在屏幕会话中运行Bash,而HISTSIZE = 0仍会将您的活动详细信息保留在屏幕的回滚缓冲区中。因此,如果您确实想要清洁,则也必须这样做scrollback=0
gsbabil

当窗口关闭时(即外壳退出时),将清除回滚缓冲区。如果您输入Ctrl-a H怎么办?它会杀死日志文件吗?
amphetamachine

@amphetamachine:不,它将仅开始/结束当前窗口的记录。Nighther Ctrl+a HCtrl+a :clear不会删除历史记录。你需要Ctrl+a :scrollback 0。您可以自己测试。开始一个新的屏幕会话。现在做一个cat /etc/passwd。现在,执行以上任何一项- Ctrl+a HCtrl+a :clear。现在,尝试使用donig Ctrl+a [和向上箭头从屏幕缓冲区进行复制,然后向上复制,查看可以复制多远。如果在a Ctrl+a :scrollback后面加上a clear,则将只走到当前窗口中可以看到的最深处,因为将没有任何回滚缓冲区。
gsbabil 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.