bash 提示符中的额外字符

bash 提示符中的额外字符

我一直在尝试自定义我的 bash 提示符

下面是我的配置

#!bin/bash
Nocolor="\[\033[0m\]"       # Text Reset

# Bold High Intensty
BIBlack="\[\033[1;90m\]"      # Black
BIRed="\[\033[1;91m\]"        # Red
BIGreen="\[\033[1;92m\]"      # Green
BIYellow="\[\033[1;93m\]"     # Yellow
BIBlue="\[\033[1;94m\]"       # Blue
BIPurple="\[\033[1;95m\]"     # Purple
BICyan="\[\033[1;96m\]"       # Cyan
BIWhite="\[\033[1;97m\]"      # White

function git_color {
  local git_status="$(git status 2> /dev/null)"

  if [[ $git_status =~ "Changes not staged for commit" ]]; then
    echo -e $BIRed
  elif [[ $git_status =~ "Changes to be committed" ]]; then
    echo -e $BIYellow
  else
    echo -e $BIGreen
  fi  
}

PS1="\u\[$BIRed\]\W"
PS1+="\$(git_color) $ " 
PS1+="\[$Nocolor\]"

export PS1

我想做的是根据我的 git 状态用特定颜色突出显示我的 $ 符号

在这些之后我的提示看起来像这样 在此输入图像描述

这是哪里做的\[\]来自。我尝试了所有可能的方法来调用方法 git_status 但没有任何效果。

我的 Bash 版本

bash --version
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

帮帮我。提前致谢。

答案1

不要将\[\]直接包含在 PS1 中,这样您就不必跟踪在何处扩展和解释了哪些内容。

Nocolor="\033[0m"       # Text Reset

# Bold High Intensty
BIBlack="\033[1;90m"      # Black
BIRed="\033[1;91m"        # Red
BIGreen="\033[1;92m"      # Green
BIYellow="\033[1;93m"     # Yellow
BIBlue="\033[1;94m"       # Blue
BIPurple="\033[1;95m"     # Purple
BICyan="\033[1;96m"       # Cyan
BIWhite="\033[1;97m"      # White

function git_color {
  local git_status="$(git status 2> /dev/null)"

  if [[ $git_status =~ "Changes not staged for commit" ]]; then
    echo -ne "$BIRed"
  elif [[ $git_status =~ "Changes to be committed" ]]; then
    echo -ne "$BIYellow"
  else
    echo -ne "$BIGreen"
  fi  
}

PS1="\u\[$BIRed\]\W"
PS1+="\[\$(git_color)\] $ " 
PS1+="\[$Nocolor\]"

我还添加了-n回声,但应该不会有什么不同。

答案2

有人发布了删除颜色代码的答案\[\]。后来他/她删除了答案。谢谢你的建议,它有效

我已经"\[\033[0m\]"改为"\033[0m"

有效。感谢您的回答

相关内容