前言
- 在用 Bash / ZSH 時,常用方向鍵來取得先前下過的指令。但如果重複使用指令,只希望被記錄一次、或是輸入 token 或密碼時不想留存在歷史紀錄中該怎麼辦呢?
bash
設定 HISTCONTROL
- 可以用
HISTCONTROL
來控制紀錄歷史指令的條件:
|
|
例如指令下了以下的順序:
|
|
- 如果是
ignorespace
|
|
結果
ls
ls
cat ./*
cat ./*
- 如果是
ignoredups
|
|
結果
ls
cat ./*
echo ${MYPASSWORD}
- 如果是
ignoreboth
|
|
結果
ls
cat ./*
忽略指定指令 HISTIGNORE
|
|
上面的例子用冒號隔開指定的指令不記錄,因此會忽略以下:
-
ls
-
bg
-
fg
-
exit
-
pwd
-
clear
-
history
-
空白開頭的指令
其中
-
最前面的
&
代表重複的指令 (不被記錄) -
最後面的
*
代表後面是任意字串
別忘了 .bashrc
當你挑好喜歡的設定後,記得把它加進 .bashrc
中
|
|
zsh
setopt
zsh 的設定變數名稱看起來相對直覺:
- 開關類型的用
setopt
指定 - 特定 pattern 的變數是
HISTORY_
開頭
|
|
其中
-
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
- https://stackoverflow.com/questions/6475524/how-do-i-prevent-commands-from-showing-up-in-bash-history
- https://superuser.com/questions/232885/can-you-share-wisdom-on-using-histignore-in-bash
- https://gist.github.com/Angles/3273505
(zsh)