我的目标是有一个 bash 提示符,它显示一个缩短的用户名、一个缩短的蓝色路径,以及一个每次我输入错误命令时都会重置的计数器变量(我将使用 进行检查$?
,尽管这并不完全相同)。
现在,我~/.bashrc
有:
counter=0
#should increment counter if no errors, else reset counter
PROMPT_COMMAND="if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi"
PS1='(${USER:0:3}@\[\e[0;34m\]$(basename $(dirname $PWD))/$(basename $PWD)\[\e[m\])[$counter]\\$ '
这显示:
(use@//home)[17]$
我的主要问题是当我获得非零退出状态时,计数器永远不会重置为零。我可以在PROMPT_COMMAND
失败的命令之后运行命令,例如aasdjfasdf
并且echo $counter
会显示 a 0
(实际上是 a 1
,因为 PROMPT_COMMAND 会立即增加它)。
我的另一个较小的问题是在根目录中我的提示将显示
(use@///)[11]$
这不太理想(3 /'s)。我也不确定如何解决这个问题,但至少这没什么大不了的。
如何让 PROMPT_COMMAND 正确递增和重置计数器?
编辑:这是我的 PS1,可以做我想做的一切,以防其他人好奇:
counter=0
PROMPT_COMMAND='if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi;'
PS1='(\[\e[4m\]${USER:0:3}\[\e[0m\]@\[\e[34m\]${PWD:${#PWD}<15?0:(-15)}\[\e[m\])[$counter]\\$ '
将 PROMPT_COMMAND 更改为:
使用单引号来防止 的过早扩展
$?
,并对 的递增值使用直接赋值counter
。