PS1 中的 \# 和 !n 中的 n 之間的差異從何而來?

PS1 中的 \# 和 !n 中的 n 之間的差異從何而來?

有件事一直困擾著我一段時間,我似乎無法在手冊頁或使用您的「不要作惡」搜尋引擎中找到相關答案。

我的 .bashrc 有以下內容:

shopt -s histappend
HISTSIZE=100
HISTFILESIZE=0   # 200 previous value

將 HISTFILESIZE 設定為 0 允許我從每個新學期視窗的乾淨歷史記錄開始。

我發現它與使用包含 的提示結合起來很實用,因為在使用或\#調用之前可視化前一個命令時,可以這樣做:!n!-p

$ history | more 

查看其相關的「n」值

就我而言,通常的結果是:

$ \history | tail -1 | awk '{print $1}'   # (I know this is an overkill, don't flame me)

等於 PS1 中 # 的擴充值減 1,這就是我一直喜歡的方式。但有時不是。有時 # 的擴充值有點「跑掉」。它以這樣一種方式遞增,使它變得 > 比

$(( $(\history | tail -1 | awk '{print $1}')+1 ))

有人指點一下嗎?

答案1

最可能的原因是您設定HISTCONTROL的值包含ignoredupes.透過運行測試

echo $HISTCONTROL

如果傳回類似 的內容ignoredups,則表示重複的命令不會儲存到您的歷史記錄中。他們但按 PS1 計算\#。這意味著\#每次您運行相同的命令兩次時,它都會愉快地增加,但您history不會增加,這將導致您觀察到的差異。

因此,要么刪除ignoredupesfrom HISTCONTROL(這通常在您的中設置~/.profile,但也可以在 中設置~/.bashrc)或使用\!而不是\#PS1.

相關內容