每次显示新提示时,Bash 提示执行命令

dan*_*996 13 bash prompt

我在 bash 中有以下提示,它显示了当前的 git 分支:

PS1+="$(git_prompt)" #git_prompt is a function in my .bashrc
Run Code Online (Sandbox Code Playgroud)

这在我获取 .bashrc 时有效,但在我更改分支时无效,因此 PS1 var 仅在我获取 .bashrc 时进行评估,但每次显示新提示时都应进行评估。这如何用 bash 4.3 完成?

Hau*_*ing 15

你的问题是,$(git_prompt)被评估为一些常量字符串之前,它被添加到$PS1。您必须改为添加代码:

PS1+='$(git_prompt)'
Run Code Online (Sandbox Code Playgroud)

  • 这给出了错误`bash:命令替换:第1行:意外标记附近的语法错误`)' bash:命令替换:第1行:`git_prompt)'` (2认同)

dan*_*996 12

我现在通过使用它作为提示来修复它

PS1="$green\u $r@ $red\h $r: $yellow\W \!$r \$(git_prompt) \n$yellow\$ $r"
Run Code Online (Sandbox Code Playgroud)

在我将多个字符串连接到一个 PS1 字符串之前,似乎存在问题。诀窍是\在执行命令之前写一个$(git_prompt).

所以$(git_prompt)将在被评估时.bashrc被评估并且

\$(git_prompt) 将在每次显示新提示时进行评估

  • 对于将来发现此问题的任何人:请注意字符串周围的双引号 `"`。使用 `\$(git_prompt)` 没有这些是行不通的。 (5认同)