避免将命令保留在历史记录中


33

我使用bash,我想避免某些命令保留在历史记录中。

  • 是否可以仅对下一个命令执行此操作?
  • 是否有可能在整个会话中都这样做?

请注意,如果目标是隐藏命令行参数中的密码,则它们仍然可以通过ps看到
Benitok

Answers:


36

我只记得另一个答案,这个答案是您问题的实际答案。

如果您在HISTCONTROL中具有“ ignorespace”,则bash不会记住任何以空格字符开头的行。即使在当前Shell的历史记录中也不会出现,更不用说保存到$ HISTFILE了。

例如我在〜/ .bashrc中导出了HISTCONTROL ='ignoreboth:erasedups'

这是bash手册页中的详细信息:

历史控制
  用冒号分隔的值列表,用于控制命令的使用方式
  保存在历史记录列表中。如果值列表包括
  ignorespace,以空格字符开头的行不是
  保存在历史记录列表中。忽略的值导致行
  匹配以前的历史记录条目将不被保存。值
  ignoreboth是ignorespace和忽略up的简写。一个值
  的擦除导致所有先前的行与当前行匹配
  在保存该行之前将其从历史记录列表中删除。
  不在上面列表中的任何值都将被忽略。如果HISTCONTROL为
  未设置或不包含有效值的所有行
  shell解析器将保存在历史记录列表中,具体取决于值
  HISTIGNORE。多行的第二行和后续行
  复合命令未经测试,并且已添加到历史记录中
  无论HISTCONTROL的值如何。

1
+1技巧:D
petrus

19

这是我从谷歌搜索中学到的一些历史课程:

您可以设置历史记录以忽略某些字符串。在此示例中,我忽略了命令ls,passwd和任何以字符空间为前缀的命令。

export HISTIGNORE =“ ls:passwd:”

要禁用会话的历史记录,可以发出:

出口HISTSIZE = 0

参考


7

如果只想从历史记录中删除最后一个命令,则可以单击Up-arrow,然后单击Ctrl - U(擦除到行的开头),然后Up-arrow再次单击。

您可以像这样从历史记录中删除任何一行。只需使用向上箭头或搜索或使其变为当前正在编辑的命令行,然后按Ctrl - U,然后按Up-arrowDown-arrow即可移至另一历史记录行。

我是几天前偶然发现的。我不知道它是否有文件记录。

通常,尽管如此,使用以下命令完全不保存当前shell的历史记录比较麻烦:

HISTFILE=/dev/null

3

您可以取消设置HISTFILE变量。来自man bash

  历史文件
         保存命令历史记录的文件名(请参阅HIS-
         下面的TORY)。默认值为〜/ .bash_history。如果未设置,
         交互式shell时未保存命令历史记录
         退出。

我认为这不会阻止命令在外壳退出之前出现在本地外壳历史中。



1

我看到没人写这种方法,所以我会的。

history -d $((HISTCMD-1)) && history -d <command or number of command>

history -d 从历史记录中删除提及的条目。

HISTCMD存储下一个要执行的命令的command_number。因此,(HISTCMD-1)指的是最后执行的命令。

我做了一部简短的bash电影,展示了它的工作原理:https : //asciinema.org/a/dtxpuovhty0obhln50soqypt2

在运行命令并且删除命令本身之后,箭头上的箭头将不会显示该命令,因此,如果您打算经常使用该命令,则最好创建一个别名:

alias hc='history -d $((HISTCMD-1)) && history -d $1'

然后,您可以执行以下操作:

$ hc command
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.