bash 和 zsh 都支持一种简写方式,即如果您在命令前面添加空格,则不会将命令放入历史记录中。这在跨会话中非常有效(如果你有的话setopt histignorespace
)。但是,该命令仍在当前会话的历史记录中。
如何避免将命令放入当前会话的历史记录(或者执行后删除 if )?
答案1
使用setopt histignorespace
, 命令是从当前会话历史记录中删除。如果您通过按下进行测试Up并看到命令行仍然存在,那么它是一个功能。
请注意,该命令会一直保留在内部历史记录中,直到输入下一个命令才会消失,从而允许您短暂地重用或编辑该行。如果您想让它立即消失而不输入其他命令,请键入空格并按回车键。
如果您键入的命令不以空格开头或没有histignorespace
打开该选项,则无法从当前会话的历史记录中删除该命令(您可以在外部编辑历史文件)。
答案2
如果您使用 bash 而不是 zsh,则可以使用以下技术从历史记录中删除命令:
按向上箭头到达该行,然后按 Ctrl-U 将其删除。不要按 ENTER,而是按向上或向下箭头转到另一历史记录行。
您要删除的行将被替换为空行。我不知道这是否在任何地方都有记录,几年前我偶然注意到它......我想擦除只是对历史行的相当彻底的编辑:)。
例如,不要按 ^U 来清除该行,而是更改一些内容。不要按回车键,因为这将创建一个新的历史条目。请改为按向上或向下箭头。该行现在在历史记录中永久更改,您可以通过使用向上/向下箭头将其重新显示到视图中来看到。
我所说的永久,是指在按向上/向下箭头键后,即使您在新的/编辑的命令上按 Enter 键,该行也将保持更改状态。只有编辑过的行将保留在历史记录中,替换原始行,并在退出该 shell 时像往常一样保存到 $HISTFILE 中。
您可以按 ^C 中止编辑或 ^U 擦除,以阻止其影响历史记录。
history -d
另一种方法是在您知道历史行号的情况下使用。例如:
$ 历史 | grep 历史 |尾巴 [……无关,已删除……] 10113帮助历史 10114历史| grep 历史 |尾巴 $ 历史 -d 10113 $ 历史 | grep 历史 |尾巴 [……无关,已删除……] 10113 历史 -d 10113 10114历史| grep 历史 |尾巴
该help history
行已被删除history -d 10114