我使用 bash,我想避免一些命令被保留在历史记录中。
- 是否可以仅对下一个命令执行此操作?
- 整个会议期间都可以这样做吗?
答案1
我刚刚想起另一个答案,这是对你的问题的实际答案。
如果在 HISTCONTROL 中有“ignorespace”,那么 bash 将不会记住以空格字符开头的任何行。它甚至不会出现在当前 shell 的历史记录中,更不用说保存到 $HISTFILE 了。
例如我有导出 HISTCONTROL='ignoreboth:erasedups'在我的 ~/.bashrc 中
以下是 bash 手册页的详细信息:
组织控制 用冒号分隔的值列表,控制命令如何执行 保存在历史列表中。如果值列表包括 ignorespace,以空格字符开头的行不会被 保存在历史列表中。ignoredups 的值会导致行 匹配上一个历史记录条目,则不保存。 ignoreboth 是 ignorespace 和 ignoreups 的简写。值 删除会导致所有先前的行与当前行匹配 在保存该行之前将其从历史列表中删除。 任何不在上述列表中的值都将被忽略。如果 HISTCONTROL 为 未设置,或者不包含有效值,则读取的所有行 shell 解析器保存在历史列表中,取决于值 HISTIGNORE 的。多行文本的第二行和后续行 复合命令未经测试,并被添加到历史记录中 无论 HISTCONTROL 的值如何。
答案2
以下是我通过谷歌搜索学到的一些历史课程:
您可以设置历史记录以忽略某些字符串。在此示例中,我忽略了命令 ls、passwd 以及任何以空格字符为前缀的命令。
导出 HISTIGNORE="ls:passwd:"
要禁用会话的历史记录,您可以发出以下命令:
导出 HISTSIZE=0
答案3
如果您只想从历史记录中删除最后一个命令,那么您可以按Up-arrow,然后按Ctrl - U(擦除到行首),然后Up-arrow再按一次。
您可以像这样从历史记录中删除任何一行。只需使用向上箭头或搜索或其他任何方式使其成为当前正在编辑的命令行,然后按Ctrl - U,然后按Up-arrow或Down-arrow移动到另一条历史记录行。
几年前的一天,我偶然发现了这一点。我不知道是否有记录。
不过,一般来说,使用以下命令根本不保存当前 shell 的历史记录会更省事:
HISTFILE=/dev/null
答案4
我发现没有人写过这种方法,所以我来写一个。
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