我正在尝试将 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)#'