让特定命令远离 shell 历史记录

让特定命令远离 shell 历史记录

我有一个命令实际上会清除屏幕,而不是简单地滚动,就像默认的一样,在我的中clear别名为:c.zshrc

alias c='clear && printf "\e[3J";'

我的问题是:如何使此命令远离我的 zsh 命令历史记录,以便当我使用向上箭头键向上滚动时看不到它?

答案1

使用 时set -o histignorespace,以 SPC 字符开头的命令行不会插入到历史记录中(尽管您始终可以回忆起之前输入的命令)。

所以如果你做到了:

set -o histignorespace
alias c=' printf "\e[H\e[3J"'

并输入第一个命令为 的命令行c,则该命令行将不会添加到历史记录中。

另一种方法可能是重新定义accept-line小部件,以便在它仅包含以下内容时清理屏幕和编辑缓冲区c

accept-line() case $BUFFER in
  (c) printf '\e[H\e[3J'; BUFFER=; zle redisplay;;
  (*) zle .accept-line
esac
zle -N accept-line

请注意,只有输入后它才会起作用,仅c此而已,而不是c; something-else例如。如果您Enter在 PS2 提示符下按下,它也会执行此操作,如下所示:

for i do
c

答案2

在 bash 中,HISTIGNORE='c' doesn't store a command line of a singlec to the memory list of commands. The similarly namedHISTORY_IGNORE in zsh is used to avoid sending the command to the history **file**, which is something different. AHIST_NO_STORE` 也存在于 zsh 中,但似乎因别名而失败。

c所以,历史上似乎没有办法避免出现别名。

然而,您正在做的事情,清除当前窗口 ( clear) 并删除回滚 ( printf "\e[3J") 也可以使用另一个 ANSI 控制序列来完成:

ESC c               # Full Reset (RIS), VT100.

所以,一个

printf '\ec'

应该足够了。

为此定义键盘快捷键应该很简单,并且可以避免在历史记录中存储任何命令。

答案3

Method1:

    Just Put one blank space before entering any command it wont be recorded in history

Method2:

    set +o history (After this No command will be recorded  in history)

    set -o history(After this again command will be recorded in history)

相关内容