我有以下回答如何从历史记录中删除一行?。当我执行以下操作时,行 ( echo hello_world
) 不会保存到历史记录中。请注意,我使用的是zsh
shell。
prompt$ echo hello_world
> # ^ extra space
$ history | tail -n1
1280 history | tail -n
$ echo hello_world
hello_world
$ history | tail -n1
1280 history | tail -n
但是当我运行一个在开头和 do 之后有空格的命令时Ctrl+P,我可以在 shell 历史记录中看到它,即使它没有保存在history
.有可能预防吗?对于bash
shell,这在设置时有效HISTCONTROL= ignorespace
。
$ echo hello_world
$ # Press `CTRL-p` => " echo hello_world" shows up again
设置:我对 shell 有以下配置
zsh
:
## Save only one command if 2 common are same and consistent
setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_ALL_DUPS
## Delete empty lines from history file
setopt HIST_REDUCE_BLANKS
## Ignore a record starting with a space
setopt HIST_IGNORE_SPACE
## Do not add history and fc commands to the history
setopt HIST_NO_STORE
## Add timestamp for each entry
setopt EXTENDED_HISTORY
答案1
您观察到的行为,即按下Ctrl+P会返回上一个命令,即使它以空格开头并HIST_IGNORE_SPACE
已设置,已记录(我的重点):
HIST_IGNORE_SPACE
(-g
)当命令行中的第一个字符是空格,或者扩展别名之一包含前导空格时,从历史记录列表中删除命令行。只有普通别名(不是全局别名或后缀别名)才有此行为。 请注意,该命令会一直保留在内部历史记录中,直到输入下一个命令才会消失,从而允许您短暂地重用或编辑该行。如果您想让它立即消失而不输入其他命令,请键入空格并按回车键。
根据手册,解决方法是键入一个空格并按Enter以防止Ctrl+P再次访问该命令。
答案2
不确定这是否是您正在寻找的内容,但在运行历史记录中不需要的命令之前,您可以使用以下命令为当前 shell 禁用它
$ 设置 +o 历史记录
然后 ctrl-p 将仅显示该内容,之后不显示任何内容