将 svn 分支添加到 bash 提示时,意外标记“(”附近出现语法错误

将 svn 分支添加到 bash 提示时,意外标记“(”附近出现语法错误

我正在尝试将 SVN 和 git 分支添加到 bash 提示符中。我要添加的代码bashrc

parse_git_branch () {
  git name-rev HEAD 2> /dev/null | sed ’s#HEAD\ (.*)# (git::\1)#‘
}
parse_svn_branch() {
  parse_svn_url | sed -e ’s#^’“$(parse_svn_repository_root)”‘##g’ | awk ‘{print “ (svn::”$1")“ }’
}
parse_svn_url() {
  svn info 2>/dev/null | sed -ne ’s#^URL: ##p'
}
parse_svn_repository_root() {
  svn info 2>/dev/null | sed -ne ’s#^Repository Root: ##p'
}


BLACK=“[\033[0;38m]”
RED=“[\033[0;31m]”
RED_BOLD=“[\033[01;31m]”
BLUE=“[\033[01;34m]”
GREEN=“[\033[0;32m]”



export PS1=“$BLACK[ \u@$RED\h $GREEN\w$RED_BOLD\$(parse_git_branch)\$(parse_svn_branch)$BLACK ] ”

消息来源来自: https://hocuspokus.net/2009/07/add-git-and-svn-branch-to-bash-prompt/

问题是我收到一条语法错误消息

-bash: /home/mark/.bashrc: line 125: syntax error near unexpected token `('
-bash: /home/mark/.bashrc: line 125: `  git name-rev HEAD 2> /dev/null | sed ’s#HEAD\ (.*)# (git::\1)#‘'

当我在 atom 文本编辑器中打开该文件时,我可以看到#之后的(.*)内容已被视为注释,因此删除了之后的所有内容。即已(git::\1)#'被视为注释。

我该如何解决?

答案1

主要问题是你使用了印刷上的“智能引号”

’ “

代替常规 ASCII 引号

'  "

在整个脚本中。由于 shell 无法将它们识别为引号字符,因此它会尝试将您的sed命令解析为 shell 命令,但失败了。

修复该问题后,你的脚本就可以运行了 - 但是你可能会收到sed类似这样的错误

sed: -e expression #1, char 24: invalid reference \1 on `s' command's RHS

来自你的命令

sed 's#HEAD\ (.*)# (git::\1)#'

因为()在基本正则表达式 (BRE) 语法中不界定捕获组。相反,您需要\(\)

sed 's#HEAD \(.*\)# (git::\1)#'

(空格字符实际上不需要使用反斜杠转义);或者你可以使用-E或切换到扩展正则表达式(ERE)模式-r

sed -E 's#HEAD (.*)# (git::\1)#'

相关内容