Don';t将当前bash会话保存到历史记录
我注意到,当打开Don';t将当前bash会话保存到历史记录,bash,Bash,我注意到,当打开.bash\u history时,它只包含我上一个会话中的条目,似乎只有在退出时才会追加当前会话。是否有任何方法阻止保存当前会话?即使是崩溃bash也是一种选择,如果你知道怎么做的话。我发现我可以kill-9进程,但是如果有更好的方法,我想知道。取消设置$HISTFILE变量 $ unset HISTFILE 如果HISTFILE未设置,或者历史文件不可写入,则不会保存历史。 使用history-c命令清除当前会话的历史记录可能比崩溃bash更优雅。然后,就没有什么可保存的了
.bash\u history
时,它只包含我上一个会话中的条目,似乎只有在退出时才会追加当前会话。是否有任何方法阻止保存当前会话?即使是崩溃bash
也是一种选择,如果你知道怎么做的话。我发现我可以kill-9
进程,但是如果有更好的方法,我想知道。取消设置$HISTFILE
变量
$ unset HISTFILE
如果HISTFILE未设置,或者历史文件不可写入,则不会保存历史。使用
history-c
命令清除当前会话的历史记录可能比崩溃bash更优雅。然后,就没有什么可保存的了(它甚至会从历史中抹去自己)。这应该可以:
HISTFILE=
取消设置历史文件。还有另一个选项,类似于
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:~$
以下内容适合我
export HISTFILE=/dev/null
请注意,它前面有一个空格。大多数现代发行版都不会添加在空格后输入的命令来bash history。这将防止该行也出现在您的历史记录中。我知道这是一个旧线程。只是想添加以下内容以完成: 如果您只想不保存特定命令,请检查是否设置了
HISTCONTROL
变量:
HISTCONTROL=ignoreboth
或
HISTCONTROL=ignorespace
以前导空格开头的每个命令都不会放入历史记录中
就我的2美分。这是您的bash历史工具包 不写任何东西就退出bash 这是黑客和侵略性的。但这是结束间谍活动的有趣方式 从记忆中清除历史 这将清除所有历史记录的内存。如果你按向上箭头,你什么也得不到。您的
$HISTFILE
未被触动。你可以用……来证明这一点
从磁盘重新加载历史记录
这将重新读取$HISTFILE
,并将其附加到内存中的历史记录中(如果有)。您可以在history-c
之后执行此操作,以恢复对以前的命令执行Ctrl+R搜索或向上箭头的功能。(您可以这样做,而不是注销和重新登录)
注意:如果您没有首先清除历史记录,这只会附加到内存中的当前历史记录。这将掩盖历史,因此点击向上箭头几次会让你感到安慰,因为你想隐藏的东西已经不见了。实际上,它只是被掩埋并将被写入磁盘,除非它比$HISTSIZE
或$HISTFILESIZE
更深
执行命令时不将其包含在历史记录中
这将使用history-d
按编号删除条目。由于只使用第一个参数(其他参数被忽略),我们可以使用history 1
(与history | tail-n1
)的输出来获取当前条目的编号
因为bash OneLiner是单个历史记录条目,所以您可以执行以下多个命令:
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
我希望我不必告诉你这一点,但以防万一:不要将历史记录作为密码。如果你“真的”需要搜索历史记录,请执行history | LESSHISTFILE=/dev/null less
,并显式执行//code>搜索
如果你真的很尴尬,希望没有你从历史中删除某些东西的记录,你可以将这个概念与最后一个概念结合起来
history -d 4; history -d $(history 1)
或者也为了摆脱原来的错误
for n in "$(history 1)" 4 3; do history -d $n; done
请注意,您必须按下位顺序循环查看条目编号,因为每次调用history-d
都会将条目从列表中弹出,并且所有后续条目的编号都会减少1。此外,您还必须对子shell进行双引号引用,因为history 1
不仅返回数字,还返回命令及其参数,并且在for
循环中,每个命令都会得到一个单独的循环。但是在这一点上,这将变成一个bash
课程,我将停止。这也会破坏histfile的内容。对我来说不是这样。也许它在某个时候改变了?我正在使用Bash4.2。谢谢,这似乎是最干净的方法!在Bash4.3.39上,history-c
不仅仅清除当前会话的历史记录。它还清除bash启动时从历史文件开始读取的历史。如果您即将关闭bash,这并不重要。这只存在于内存中的历史缓冲区中-它实际上不会擦除历史文件(可能是.bash_history)。即使您干净地退出bash,它也不会破坏历史文件。因此,如果您没有退出bash,可以使用history-r
来重新读取历史文件。遗憾的是,history-cr
并不能同时完成这两项功能。@BrunoBronosky,我没有理由不相信,但我想我确实在五年前测试过它,然后再连接上面的内容。我真的不记得了。也许这与其他设置有关,系统默认值不同或已更改…实现这一点的一种黑客方法是使用kill-9$$
。通过向终端发送SIGKILL,它没有机会写入历史文件
for x in foo bar baz; do
echo $x
done; history -d $(history 1)
$ history
1 pwd
2 date
3 sudovisudo
4 hunter2
5 man history
6 help history
7 history
$ history -d 4
history -d 4; history -d $(history 1)
for n in "$(history 1)" 4 3; do history -d $n; done