为什么删除bash历史记录还不够?


15

我曾经认为删除我的bash历史记录足以清除bash历史记录,但是昨天我的猫在键盘右侧乱七八糟,当我回到计算机后,我看到一个月前我键入的内容,然后我开始疯狂地按下所有键,寻找可能触发它的原因。原来,即使删除了.bash_history,UPARROW键仍显示我的bash历史记录。

如何真正删除我的bash历史记录?


8
每次关闭bash shell时,.bash_history都会被覆盖。因此,如果您启动bash,删除.bash_history并注销,您将一无所获。
Shadur

14
您的猫值得得到丰厚的回报。您使用bash已有多长时间而没有发现它具有命令行调用和编辑功能?您是否只是每次都从头开始重新键入每个命令行?这将使外壳非常不舒服。
cas

@cas十年。现在您说了这一点,我按Uparrow来重复命令,但是我将其理解为一种“短期”记忆,长度不超过几行。我没有警告过删除.bash_history不会删除bash历史记录。
Bunden

删除~/.bash_history确实删除~/.bash_history....但(除非你采取措施,以防止它,就像运行清除内存中的历史history -c你注销之前或设置HISTFILE=/dev/null或只是unset荷兰国际集团吧)bash将只是保存其当前历史退出时再次。顺便说一句,HISTSIZEenv var告诉bash内存中要保留多少行历史记录,并HISTFILESIZE告诉bash要保存的最大历史行数。两者都可以在您的中设置~/.bashrc。PS:您的猫值得教给您一次宝贵的教训,第二次奖赏:)
cas

@cas我认为删除.bash_history应该删除bash历史记录。对我来说似乎很直观。从用户体验的角度来看,历史记录-c,历史记录-w,未设置的变量似乎不是很直观。
Bunden

Answers:


26

在某些情况下(某些bash版本),请执行以下操作:

$ history -c; history -w

或者简单地

$ history -cw

将清除内存中的历史(向上和向下箭头将不得不列表中没有命令),然后写的是$HISTFILE文件(如果$HISTFILE得到由运行bash实例截断)。

有时bash选择截断$HISTFILE文件,即使histappend设置选项并将其$HISFILEZIZE设置为0。

在这种情况下,nuke选项始终有效:

history -c; >$HISTFILE

清除记录在内存中的命令和以前记录到文件的所有命令的历史记录列表。这将确保正在运行的外壳程序在内存或磁盘中都没有记录的历史记录,但是,其他正在运行的bash实例(历史记录处于活动状态)可能具有从$HISTFILEbash启动(或history -r执行a时)读取的命令的完整副本。。

如果要求将当前会话的其他内容(没有新命令)写入历史文件,unset HISTFILE则将阻止任何此类日志记录。


1
编辑HISTFILE并执行此操作history -c && history -r会将您的当前历史记录替换为手动修改的历史记录。在某些情况下,这可能比丢掉所有历史记录更好。
米科·兰塔莱宁

9

bash内存中有一个会话历史记录,如果HISTFILEbash退出时将shell变量设置为文件名,则该会话历史记录将写入文件。

如果删除指向的文件HISTFILE,取消设置该变量,然后退出bash,则该shell会话将不会保留任何持久性历史记录。

无法取消设置HISTFILE变量但删除文件只会清空持久性历史记录,但是当shell退出时将保存当前会话的历史记录。


3
A history -c; history -w将清除内存和文件历史记录。仅当没有更多命令记录到历史记录中时才需要取消设置HISTFILE(与IMhO要求的不完全相同)。
以撒

-1

“我如何才能真正删除我的bash历史记录?”

退出bash,启动另一个shell,删除bash历史记录文件。

要么

注销,登录到对历史文件具有写权限的其他帐户,然后删除历史文件。


-2

离开外壳时,一次完成所有操作,例如

echo "" > ~/.bash_history && history -c && exit

@roaima,您说的很对,谢谢。已更正。
user853069
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.