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不会增加,这将导致你观察到的差异。

因此,要么删除ignoredupesHISTCONTROL这通常在您的中设置~/.profile,但也可以设置在~/.bashrc)或使用\!而不是\#PS1

相关内容