git config --global 返回“在`)'附近的语法错误”错误

5
当我尝试执行以下操作时:
$ git config --global user.name "Me"

它返回了这个错误:

bash: command substitution: line 1: syntax error near unexpected token `)'
bash: command substitution: line 1: `__git_ps1)'

我正在 Windows 7 上运行 Git 2.6.3,安装路径为 C:\opt\git-2.6.3,我的 .gitconfig一开始是空的。但是除了这个错误之外,它还填充了以下内容:
[user]
name = Me

每次我敲入命令,提示符都会返回相同的错误信息……

我该如何解决这个问题?

谢谢您的帮助。


问题不在于 Git,而是在于你的 shell。检查你的 .bash_profile(或任何其他配置文件)。此外,Stack Overflow 实际上只用于编程问题。你应该在 Super User 上提出这类问题。 - Léo Lam
删除您的.gitconfig文件,然后再尝试该命令。如果您仍然看到错误,则是像Leo所说的您的shell的问题。如果是这种情况,我建议重新安装Git。 - nick
除非在 Git 安装过程中特别选中一个选项,否则默认的 Windows 命令提示符可能没有完整功能。确保使用 Git 命令提示符。 - nick
1
@LéoLam 我不认为这是离题的。提问说“我们认为最好的Stack Overflow问题中有一些源代码”,但“程序员常用的软件工具”是可以讨论的。 - John Szakmeister
正如@LéoLam所说,很可能是你的.bashrc出了问题。如果我猜的话,可能是提示符方面的问题(可能是缺少引号或类似的东西)。 - John Szakmeister
2个回答

15

我还追踪到了$(__git_ps1)后面的\n

简化PS1提示符:

这个有效:

PS1='$(__git_ps1)'

这样做是不行的;会出现语法错误消息:

PS1='$(__git_ps1)\n'

然而,在ASCII中加入 \n 是有效的

PS1='$(__git_ps1)\012'

有趣的是,在 \012 后你还可以再次使用 \n:

PS1='$(__git_ps1)\012\n'

注意: 我在我的PS1中发现了额外的错误;不确定它们是否在之前存在,当我更新git时出现了一些奇怪的事情,或者可能是(很可能是!)来自我过去的折腾......

我的PS1(在今天早些时候更新git后)是:

PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]\n\[\033[32m\]\u@\h \[\033[33m\]\w \[\033[1m\]\[\033[31m\]$(__git_ps1)\[\033[0m\]\n$ '

这会导致语法错误,但第一个转义序列也是错误的:

wrong!   PS1='\[\033]0;$MSYSTEM ...
right!   PS1='\[\033[0;m$MSYSTEM ...

\033[1;32m\u@\h \w\[\033[0;31m\]$(__git_ps1 \"(%s)\")\033[0m\$

在\033之后的括号反了,并且缺少了一个'm'...

我现在已经更正了我的PS1:

PS1='\[\033[0;m$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]\n\[\033[32m\]\u@\h \[\033[33m\]\w \[\033[1m\]\[\033[31m\]$(__git_ps1)\[\033[0m\]\012$ '
这会将我的提示显示为:
MINGW64:/c/Users/aweiner       <-white
aweiner@ajw-sony ~             <- green, dir in yellow, git branch name in red
$

(是的,它非常冗长,所以我可能会对其进行进一步修改...)


3
在Windows的Git Bash中,在闭括号后添加\012可以完美解决该问题。 - Aaron Furtado

6

这是与 git bash 解释器有关的问题。

我在我的 .profile 文件中分离了 PS1 的定义,并发现如果在 $(blablabla) 之后出现了 \n,则会出现问题。即使 "blablabla" 绝对无辜,例如 echo helloworld

我的解决方法是使用另一个函数发射行尾换行符:

function echonewline() {
  echo -e "\n "
  # last line must be non-empty - I emit a whitespace
}

PS1=\n...all...stuff...$(__git_ps1)...colors...$(echonewline) $
# newlines before first function call are welcome.

看起来很奇怪,但它能正常工作。

适用于Windows的Git bash版本为2.8.2。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接