bash/zsh: history 設定小技巧



前言

  • 在用 Bash / ZSH 時,常用方向鍵來取得先前下過的指令。但如果重複使用指令,只希望被記錄一次、或是輸入 token 或密碼時不想留存在歷史紀錄中該怎麼辦呢?



bash

設定 HISTCONTROL

  • 可以用 HISTCONTROL 來控制紀錄歷史指令的條件:
1
2
3
4
5
HISTCONTROL=ignorespace  # 如果以空白開頭不要紀錄

HISTCONTROL=ignoredups   # 不要紀錄重複的指令

HISTCONTROL=ignoreboth   # 以上皆不紀錄 (通常預設值)

例如指令下了以下的順序:

1
2
3
4
5
ls 
ls
cat ./*
cat ./*
echo ${MYPASSWORD}
  • 如果是 ignorespace
1
history

結果

ls
ls
cat ./*
cat ./*
  • 如果是 ignoredups
1
history

結果

ls
cat ./*
echo ${MYPASSWORD}
  • 如果是 ignoreboth
1
history

結果

ls
cat ./*

忽略指定指令 HISTIGNORE

1
HISTIGNORE="&:ls:[bf]g:exit:pwd:clear:history:[ \t]*"

上面的例子用冒號隔開指定的指令不記錄,因此會忽略以下:

  • ls

  • bg

  • fg

  • exit

  • pwd

  • clear

  • history

  • 空白開頭的指令

其中

  • 最前面的 & 代表重複的指令 (不被記錄)

  • 最後面的 * 代表後面是任意字串


別忘了 .bashrc

當你挑好喜歡的設定後,記得把它加進 .bashrc

1
2
3
4
5
vim ~/.bashrc

# 放上以下
HISTCONTROL=ignoreboth
HISTIGNORE="&:ls:[bf]g:exit:pwd:clear:history:[ \t]*"



zsh

setopt

zsh 的設定變數名稱看起來相對直覺:

  • 開關類型的用 setopt 指定
  • 特定 pattern 的變數是 HISTORY_ 開頭
1
2
3
setopt APPEND_HISTORY
setopt HIST_IGNORE_DUPS
HISTORY_IGNORE="(ls(| *)|cd|pwd|exit|cd ..)"

其中

  • APPEND_HISTORY:設置這個 flag 會讓 zsh 把各個 session 的 history 分開儲存,直到 exit 之後才會歸檔在一起。
    所以新的 session 開啟時不會看到「尚未關閉」session 的 history。

    If this is set, zsh sessions will append their history list to the history file, rather than replace it. Thus, multiple parallel zsh sessions will all have the new entries from their history lists added to the history file, in the order that they exit.

  • HIST_IGNORE_DUPS:如果當前輸入的指令跟前一個相同,就忽略紀錄。

  • HISTORY_IGNORE:指定不想被紀錄在 history 中的指令 pattern。
    加上 * 可以忽略後面的任意字串。


別忘了 .zshrc

同樣,記得把它加進 .zshrc




REF

  1. https://stackoverflow.com/questions/6475524/how-do-i-prevent-commands-from-showing-up-in-bash-history
  2. https://superuser.com/questions/232885/can-you-share-wisdom-on-using-histignore-in-bash
  3. https://gist.github.com/Angles/3273505

(zsh)

  1. https://stackoverflow.com/questions/38549251/histignore-not-working-in-zsh
  2. https://zsh.sourceforge.io/Doc/Release/Options.html
  3. https://zsh.sourceforge.io/Doc/Release/Parameters.html#Parameters-Used-By-The-Shell
Licensed under CC BY-NC-SA 4.0
最後更新 2024-09-30 02:27

主題 StackJimmy 設計