讓特定指令遠離 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)

相關內容