Почему этот код работает в bash на Linux, но не в git - bash на Windows - PullRequest
1 голос
/ 11 марта 2020

Я настроил приглашение bash следующим образом:

vcs(){
  if [ $PROMPT_VCS -eq "1" ] && [ $have_vcprompt -eq "1" ]; then
    echo -en "$(vcprompt -f "on ${EMM}%n${EMW}:%b${G}%m${R}%u${NONE}")"
  fi
}

bash_prompt() {
  case $TERM in
    xterm*|rxvt*)
      local TITLEBAR='\[\033]0;${SHORT_HOST} ${NEW_PWD}\007\]'
      ;;
    *)
    local TITLEBAR=""
    ;;
  esac

  local UC=$EMG
  [ $UID -eq 0 ] && UC=$EMR

  local ARROW_COLOR=$EMR
  [ $? -eq 0 ] && ARROW_COLOR=$EMG

  PS1="\[${TITLEBAR}\
${UC}\u \
${NONE}at ${EMY}\h \
${NONE}in ${EMB}\${NEW_PWD} \
${NONE}\$(vcs) \
${K} \
\[${NONE}\]\n\[${ARROW_COLOR}\]\$ \[${NONE}\]"

}

Это прекрасно работает на моем ноутбуке с Debian, но на Windows с использованием git - bash, я получаю следующая ошибка:

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

Информация V C, следовательно, не появляется в приглашении. Я не понимаю, почему git - bash имеет проблему с этой закрывающей скобкой ..

1 Ответ

0 голосов
/ 11 марта 2020

Благодаря комментарию Геррита был найден ответ здесь . Функциональная версия (включая перевод строки) выглядит следующим образом:

  PS1="\[${TITLEBAR}\
${UC}\u \
${NONE}at ${EMY}\h \
${NONE}in ${EMB}\${NEW_PWD} \
${NONE}\$(vcs) \
${K} \
\[${NONE}\]\[${ARROW_COLOR}\]"$'\n$ '"\[${NONE}\]"

Если кто-то может объяснить, что является причиной этой проблемы, это было бы еще лучше.

...