制作一个 bash PS1 来计算“正确”命令的连续次数

制作一个 bash PS1 来计算“正确”命令的连续次数

我的目标是有一个 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例如aasdjfasdfecho $counter将显示 a 0(实际上是 a 1,因为 PROMPT_COMMAND 会立即递增它)。

我的另一个小问题是在根目录中我的提示符将显示

(use@///)[11]$

这不太理想(3/)。我也不知道如何解决这个问题,但至少这没什么大不了的。

如何让 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]\\$ '

答案1

将 PROMPT_COMMAND 更改为:

PROMPT_COMMAND='if [ $? -eq 0 ]; then counter=$((counter+1)); else counter=0; fi'

使用单引号防止过早扩展$?,并对增量的值使用直接赋值counter

相关内容