синтаксическая ошибка около неожиданного маркера' (' при добавлении svn переходят для избиения подсказки

Я пытаюсь добавить SVN и ответвление мерзавца для избиения подсказки. Код я добавляю к 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)#‘'

Когда я открываюсь, файл в текстовом редакторе атома I видит это # после (.*) рассматривался как комментарий, следовательно удаляющий все после этого. т.е. (git::\1)#' рассматривался как комментарий.

Как я фиксирую это?

1
задан 2 November 2019 в 06:10

1 ответ

Основная проблема с состоит в том, что Вы использовали типографский “smart quotes“

’ “

вместо регулярных кавычек ASCII

'  "

всюду по Вашему сценарию. Поскольку оболочка не распознает их как заключение в кавычки символов, это пытается проанализировать Ваш sed команды, как оболочка управляет и сбой.

, После того как Вы фиксируете это, Ваш сценарий должен работать - однако Вы, вероятно, получите ошибку от sed как [1 117]

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)#'

(пробел не должен на самом деле быть оставлен из обратной косой черты); или можно переключиться на режим расширенного регулярного выражения (ERE) с помощью [1 112] или -r

sed -E 's#HEAD (.*)# (git::\1)#'
1
ответ дан 7 December 2019 в 14:57

Другие вопросы по тегам:

Похожие вопросы: