【问题标题】:Why does this code work in bash on Linux, but not in git-bash on Windows为什么此代码在 Linux 上的 bash 中有效,但在 Windows 上的 git-bash 中无效
【发布时间】:2020-03-11 12:28:55
【问题描述】:

我已经像这样设置了我的 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)'

VC 信息因此不会出现在提示中。我不明白为什么 git-bash 的右括号有问题..

【问题讨论】:

  • 错误信息提示第一行是vcs)而不是vcs()。是这样吗?
  • 不,这是按原样复制的。我也可以使用vcs 函数,它工作正常,只是在提示中它似乎会导致问题。
  • FWIW,我可以通过将 vcs() 更改为 vcs) 来重现错误消息。
  • 是行尾问题吗?也许是 CR-LF 而不是 LF?
  • 其他人已经描述了这个问题:stackoverflow.com/questions/33220492/…

标签: windows bash git-bash prompt


【解决方案1】:

感谢 Gerrit 的评论,here 找到了答案。功能版本(包括换行符)如下所示:

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

如果有人能解释导致这个问题的原因就更好了。

【讨论】:

  • windows git-bash 上的提示程序可能会将\n翻译成\r\n。
猜你喜欢
  • 2012-09-20
  • 2020-12-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多