如何在 zsh 中运行命令而不将其推送到当前会话的历史记录中?

如何在 zsh 中运行命令而不将其推送到当前会话的历史记录中?

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

相关内容