首页 > 解决方案 > PS1 中的命令替换不会在应该更新的时候更新;缓存输出?

问题描述

我正在尝试在终端提示符上添加分支名称,例如user@host:directory [branch]. 我尝试了两个代码,发现 Code.2 没有按我的预期工作;签出另一个分支时不会反映分支名称。似乎 bash 正在缓存上一​​个命令的结果。

有人可以告诉我 Code.2 的问题是什么吗?我也想知道\before是什么$()意思?

环境

Code.1 - 它有效

user@host:directory [master]$ cat ~/.bashrc
PS1="\u@\h:\W \$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1]/')\$ "
user@host:directory [master]$ git checkout another-branch
user@host:directory [another-branch]$ 
user@host:directory [another-branch]$ git checkout master
user@host:directory [master]$ 

Code.2 - 它失败了

user@host:directory [master]$ cat ~/.bashrc
BRANCH_NAME=$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1]/')
PS1="\u@\h:\W ${BRANCH_NAME}\$ "
user@host:directory [master]$ git checkout another-branch
user@host:directory [master]$ 
user@host:directory [master]$ git checkout master
user@host:directory [master]$ 

标签: bash

解决方案



推荐阅读