我注意到在打开时.bash_history
它仅包含上一个会话的条目,似乎当前会话仅在退出时附加。有什么方法可以防止当前会话保存?bash
如果知道如何崩溃,甚至可以选择崩溃。我发现可以进行kill -9
此过程,但是如果有更好的方法,我想知道。
我注意到在打开时.bash_history
它仅包含上一个会话的条目,似乎当前会话仅在退出时附加。有什么方法可以防止当前会话保存?bash
如果知道如何崩溃,甚至可以选择崩溃。我发现可以进行kill -9
此过程,但是如果有更好的方法,我想知道。
Answers:
使用history -c
命令清除当前会话的历史记录可能比崩溃bash更为优雅。然后,就没有什么可保存的(它甚至可以从历史记录中删除自己)。
history -c
不仅清除当前会话的历史记录。当bash启动时,它还将清除从历史文件的开头读取的历史记录。如果您将要关闭bash,这并不重要。这仅在内存的历史记录缓冲区中-实际上不会擦除历史记录文件(可能是.bash_history)。即使您完全退出bash,它也不会破坏历史文件。因此,如果您不退出bash,则可以在其后面加上ahistory -r
以重新读取历史记录文件。可悲的是,history -cr
两者不能同时进行。
取消设置$HISTFILE
变量
$ unset HISTFILE
如果未设置HISTFILE或历史记录文件不可写,则不会保存历史记录。
http://www.faqs.org/docs/bashman/bashref_106.html
history -r
,因为这样您将失去自登录后所做的所有工作。但是,这样做将失去您在会话中要做的所有事情。
我知道这是一个旧线程。只是想添加此内容以完成操作:
如果只希望不保存特定命令,请检查是否HISTCONTROL
设置了变量:
HISTCONTROL=ignoreboth
或
HISTCONTROL=ignorespace
每个以前导空格开头的命令都不会放入历史记录中。
只是我的2美分。
ignoreboth
也不会放重复行,ignorespace
会放重复行。
还有一个类似于的选项,history -c
但是不会擦除当前会话之前的任何内容。
是history -r
,它从中重新加载历史记录HISTFILE
,就像您刚刚登录一样。
我不知道这是否可行,或者在4.3.11之前的任何bash版本中都可用,但是我将其包括在列表中会很有用。
这是显示此命令与命令之间的区别的示例-c
:
user@host:~$ # I Just logged in
user@host:~$ history | tail -n6 # this shows commands from the previous session, which ends at item 4682 as well as from the current one
4679 2014-08-23 17:15:29 # Previous session
4680 2014-08-23 17:15:33 # Still the previous session
4681 2014-08-23 17:15:37 # note the datetime
4682 2014-08-23 17:15:44 exit
4683 2014-08-23 17:17:25 # I Just logged in
4684 2014-08-23 17:19:54 history | tail -n6 # this shows the last command, and the ones from the previous session
user@host:~$ # This is a secret command, so I need to remove the traces of this session
user@host:~$ history -r
user@host:~$ history | tail -n5 # Note that I went back to item 4682, and there are no traces of history -r command
6242 2014-08-23 17:15:29 # Previous session
6243 2014-08-23 17:15:33 # Still the previous session
6244 2014-08-23 17:15:37 # note the datetime
6245 2014-08-23 17:15:44 exit
6246 2014-08-23 17:22:26 history | tail -n5 # Note that I went back to item 4682, and there are no traces of history -r command
user@host:~$ history -c # instead if I issue history -c
user@host:~$ history # everything disappears
5248 2014-08-23 17:23:13 history # everything disappears
user@host:~$
history -r
将历史记录文件的内容追加到当前历史记录列表中。当您发布答案时,无法确定这是在做什么。历史数字在您的命令之间跳跃了很多,但不要翻倍。
这是您的bash历史记录工具包...
kill -9 $$
这是hacky和侵略性的。但这是结束间谍活动的一种有趣方式。
history -c
这将清除内存的所有历史。如果您按下向上箭头,您将一无所获。您$HISTFILE
没有动过。你可以用...证明
history -r
这会重新读取$HISTFILE
并将其附加到内存中的历史记录(如果有的话)。您可以在执行此操作后history -c
重新获得使用Ctrl+R搜索或向上箭头查找先前命令的功能。(您可以执行此操作,而不是注销并重新登录)。
注意:如果您没有先清除历史记录,则只会附加到内存中的当前历史记录。这将掩盖历史,因此几次按下向上箭头可以让您感到想隐藏的东西已经消失了。实际上,除非它比您$HISTSIZE
或者更深,否则它只是被掩埋并将写入磁盘$HISTFILESIZE
。
echo foo bar baz; history -d $(history 1)
这用于history -d
按数字删除条目。由于仅使用第一个参数(其他参数将被忽略),因此我们可以使用的输出history 1
(与相同history | tail -n 1
)来获取当前条目的编号。
由于bash oneliners是单个历史记录条目,因此您可以执行多个命令,如下所示:
echo foo; echo bar; echo baz; history -d $(history 1)
这也适用:
echo foo \
bar \
baz; history -d $(history 1)
即使这样有效:
for x in foo bar baz; do
echo $x
done; history -d $(history 1)
如果您只关心消除单个条目,则可以创造性地使用前面的示例。使用history
找到要删除的条目的数量。然后按编号删除它。例如...
$ history
1 pwd
2 date
3 sudovisudo
4 hunter2
5 man history
6 help history
7 history
$ history -d 4
希望我不必告诉您这一点,但以防万一:不要grep您的密码历史记录。如果您“确实需要”搜索历史记录,请执行history | LESSHISTFILE=/dev/null less
,并明确进行/
搜索。
如果您真的很尴尬,并且不想有任何删除历史记录的记录,则可以将此概念与上一个合并。
history -d 4; history -d $(history 1)
或者也要摆脱原来的错误...
for n in "$(history 1)" 4 3; do history -d $n; done
请注意,您必须按降序循环输入条目号,因为每次调用都会history -d
将条目从列表中弹出,而所有后续条目的号都会减少1。而且,您必须用双引号括住子外壳,因为history 1
返回的不仅是数字,以及命令及其参数,并且每个都将在循环中获得一个单独的for
循环。但是现在这变成了一个bash
教训,我将停止。
那应该做:
HISTFILE=
取消设置HISTFILE。
kill -9 $$
。通过向您的终端发送SIGKILL,就没有机会写入历史文件。