Luc M Asked: 2009-08-01 20:53:44 +0800 CST2009-08-01 20:53:44 +0800 CST 2009-08-01 20:53:44 +0800 CST 避免将命令保留在历史记录中 772 我使用 bash,我想避免某些命令保留在历史记录中。 是否可以仅对下一个命令执行此操作? 是否可以在整个会话中这样做? security bash command-line-interface history 6 个回答 Voted Best Answer cas 2009-08-01T22:00:09+08:002009-08-01T22:00:09+08:00 我只记得另一个答案,这是您问题的实际答案。 如果您在 HISTCONTROL 中有“ignorespace”,那么 bash 将不会记住任何以空格字符开头的行。它甚至不会出现在当前 shell 的历史记录中,更不用说保存到 $HISTFILE 中了。 例如,我的 ~/.bashrc 中有export HISTCONTROL='ignoreboth:erasedups' 这是来自 bash 手册页的详细信息: 历史控制 以冒号分隔的值列表,用于控制命令的执行方式 保存在历史列表中。如果值列表包括 忽略空格,以空格字符开头的行不是 保存在历史列表中。ignoreups 的值导致行 匹配上一个历史条目不被保存。一个值 ignoreboth 是 ignorespace 和 ignoreups 的简写。一个值 的擦除导致所有先前的行与当前行匹配 在保存该行之前从历史列表中删除。 任何不在上述列表中的值都将被忽略。如果 HISTCONTROL 是 未设置或不包含有效值,由 shell 解析器保存在历史列表中,取决于值 的历史。多行的第二行和后续行 复合命令未经测试,并添加到历史记录 无论 HISTCONTROL 的值如何。 Michael Havas 2009-08-01T21:22:57+08:002009-08-01T21:22:57+08:00 以下是我从谷歌搜索中学到的一些历史教训: 您可以将历史记录设置为忽略某些字符串。在此示例中,我忽略了命令 ls、passwd 和任何以字符空间为前缀的命令。 出口 HISTIGNORE="ls:passwd:" 要禁用会话的历史记录,您可以发出: 导出 HISTSIZE=0 参考 cas 2009-08-01T21:50:07+08:002009-08-01T21:50:07+08:00 如果您只想从历史记录中删除最后一个命令,那么您可以点击Up-arrow,然后点击Ctrl - U(擦除到行首),然后Up-arrow再点击一次。 您可以像这样从历史记录中删除任何单独的行。只需使用向上箭头或搜索或其他任何方式使其成为当前正在编辑的命令行,然后按Ctrl - U,然后按Up-arrow或Down-arrow移动到另一个历史记录行。 一年前我偶然发现了这一点。我不知道它是否记录在案。 不过,一般来说,根本不保存当前 shell 的历史记录会更容易: HISTFILE=/dev/null Greg Hewgill 2009-08-01T21:00:44+08:002009-08-01T21:00:44+08:00 您可以取消设置HISTFILE变量。来自man bash: 历史文件 保存命令历史的文件的名称(参见 HIS- 下面的保守党)。默认值为 ~/.bash_history。如果未设置, 交互式 shell 时不保存命令历史记录 退出。 我认为这不会阻止命令在 shell 退出之前出现在本地 shell 历史记录中。 Itai Ganot 2016-11-21T08:48:16+08:002016-11-21T08:48:16+08:00 我看到没有人写过这个方法,所以我会的。 history -d $((HISTCMD-1)) && history -d <command or number of command> history -d从历史记录中删除提到的条目。 HISTCMD存储下一个要执行的命令的command_number。因此,(HISTCMD-1) 指的是最后执行的命令。 运行命令后,因为它也删除了命令本身,所以用箭头向上不会显示命令,所以如果你打算经常使用它,最好创建一个别名: alias hc='history -d $((HISTCMD-1)) && history -d $1' 然后你可以这样做: $ hc command Amandasaurus 2009-08-07T02:55:41+08:002009-08-07T02:55:41+08:00 我有时会 export HISTFILE=/dev/null
我只记得另一个答案,这是您问题的实际答案。
如果您在 HISTCONTROL 中有“ignorespace”,那么 bash 将不会记住任何以空格字符开头的行。它甚至不会出现在当前 shell 的历史记录中,更不用说保存到 $HISTFILE 中了。
例如,我的 ~/.bashrc 中有export HISTCONTROL='ignoreboth:erasedups'
这是来自 bash 手册页的详细信息:
以下是我从谷歌搜索中学到的一些历史教训:
您可以将历史记录设置为忽略某些字符串。在此示例中,我忽略了命令 ls、passwd 和任何以字符空间为前缀的命令。
要禁用会话的历史记录,您可以发出:
参考
如果您只想从历史记录中删除最后一个命令,那么您可以点击Up-arrow,然后点击Ctrl - U(擦除到行首),然后Up-arrow再点击一次。
您可以像这样从历史记录中删除任何单独的行。只需使用向上箭头或搜索或其他任何方式使其成为当前正在编辑的命令行,然后按Ctrl - U,然后按Up-arrow或Down-arrow移动到另一个历史记录行。
一年前我偶然发现了这一点。我不知道它是否记录在案。
不过,一般来说,根本不保存当前 shell 的历史记录会更容易:
您可以取消设置
HISTFILE
变量。来自man bash
:我认为这不会阻止命令在 shell 退出之前出现在本地 shell 历史记录中。
我看到没有人写过这个方法,所以我会的。
history -d
从历史记录中删除提到的条目。HISTCMD
存储下一个要执行的命令的command_number。因此,(HISTCMD-1) 指的是最后执行的命令。运行命令后,因为它也删除了命令本身,所以用箭头向上不会显示命令,所以如果你打算经常使用它,最好创建一个别名:
然后你可以这样做:
我有时会