Command-Line

當它以空格開頭時,是否可以從 zsh shell 歷史記錄中刪除以前的命令?

  • April 2, 2021

對於如何從歷史記錄中刪除單行,我有以下答案?. 當我執行以下操作時, ( echo hello_world) 行不會保存到歷史記錄中。請注意,我使用的是zshshell。

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

但是當我執行一個在開頭和之後有空格的命令時Ctrl+P,我可以在 shell 歷史記錄中看到它,即使它沒有保存在history. 有可能預防嗎?使用bash外殼,這在設置時有效HISTCONTROL= ignorespace

$  echo hello_world
$ # Press `CTRL-p` => " echo hello_world" shows up again

**設置:**我有以下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

您正在觀察的行為,即按下Ctrl+P會帶回上一個命令,即使它以空格開頭並HIST_IGNORE_SPACE已設置,也會記錄在案(我的重點):

HIST_IGNORE_SPACE (-g)

當行上的第一個字元是空格時,或者當一個擴展別名包含前導空格時,從歷史列表中刪除命令行。只有普通別名(不是全域別名或後綴別名)才有這種行為。 請注意,該命令會在內部歷史記錄中徘徊,直到輸入下一個命令才會消失,從而允許您短暫重用或編輯該行。如果您想讓它立即消失而不輸入另一個命令,請輸入一個空格並按輸入鍵。

根據手冊,解決方法是鍵入一個空格並按下Enter以防止Ctrl+P再次訪問該命令。

引用自:https://unix.stackexchange.com/questions/598709