我的目标是有一个 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/)。我也不知道如何解决这个问题,但至少这没什么大不了的。
如何让 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
。