【发布时间】:2019-07-26 07:06:55
【问题描述】:
所以,我在 Windows 上使用我的 PS1 来玩 Git bash。
我的PS1 看起来像这样:
PS1="\n\[\033[01;35m\]\u@\h\[\033[01;34m\] $PWD \[\033[00m\]\[\033[01;32m\]$(__git_ps1 "(%s)")\[\033[00m\]\nλ "
然后我注意到更改分支时分支名称没有更新,并找到this answer,它告诉我将双引号换成单引号。
现在,我的PS1 看起来像这样:
PS1='\n\[\033[01;35m\]\u@\h\[\033[01;34m\] $PWD \[\033[00m\]\[\033[01;32m\]$(__git_ps1 "(%s)")\[\033[00m\]\nλ '
突然,我在执行 .bashrc 时收到警告:
bash: command substitution: line 1: syntax error near unexpected token `)'
bash: command substitution: line 1: `__git_ps1 "(%s)")'
进一步调查显示,当我在 λ 定义末尾的 λ 之前删除 \n 时,警告消失了。
谁能回答我:
- 究竟是什么导致了这个警告(对我来说,最后的
\n似乎与__git_ps1的执行完全无关)? - 我需要更改哪些内容才能删除警告?
编辑
当我将 $(__git_ps1 "(%s)") 更改为 `__git_ps1 "(%s)"` 时,警告消失了,一切都按预期工作......
【问题讨论】:
-
我怀疑提示中的非打印字符有问题需要转义,以便提示可以正确说明终端中的长度。请参阅2.5. Bash Prompt Escape Sequences(最后 2 个)。我知道有更好的提示教程可以更好地解释这一点。你可以搜索"bash prompt escape non-printing characters",看看能不能找到详细的解释。如果提示没有正确考虑其长度,则会发生各种奇怪的事情。