我正在尝试自定义 bash 提示符,这是我的 PROMPT_COMMAND
prompt_command() {
local time="${BLUE}\t${RESET}"
local user="${GREEN}\u${RESET}"
local hostname="${GREEN}\H${RESET}"
local current_dir="${YELLOW}\w${RESET}"
PS1="⌂ ${time} ${user}@${hostname} ${current_dir} \n ➤ "
}
PROMPT_COMMAND=prompt_command
当我尝试输入某些内容(顺其自然whoami
)时,bash 似乎错误地确定了光标的位置。我几乎看不到最后一个(最右边的)符号(i
在本例中),即光标与它重叠。
我说“宽”是因为当我用, ,符号➤
之一替换时一切正常。我尝试了另一个箭头$
ш
⌂
这里得到相同的结果。
谁能解释一下发生了什么(或者只是给我“bash兼容”箭头)?
答案1
看来问题有点复杂了。真正的问题是我这样定义颜色:
[ -z "$TPUT" ] && TPUT=tput
RESET="$( $TPUT sgr0)" # Reset all attributes
BRIGHT="$( $TPUT bold)" # Set “bright” attribute
BLACK="$( $TPUT setaf 0)" # foreground to color #0 - black
RED="$( $TPUT setaf 1)" # foreground to color #1 - red
GREEN="$( $TPUT setaf 2)" # foreground to color #2 - green
YELLOW="$( $TPUT setaf 3)" # foreground to color #3 - yellow
BLUE="$( $TPUT setaf 4)" # foreground to color #4 - blue
MAGENTA="$( $TPUT setaf 5)" # foreground to color #5 - magenta
CYAN="$( $TPUT setaf 6)" # foreground to color #6 - cyan
WHITE="$( $TPUT setaf 7)" # foreground to color #7 - white
FGDEFAULT="$( $TPUT setaf 9)" # default foreground color
export RESET BRIGHT BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE FGDEFAULT
但根据这个帖子线条内的所有颜色序列都PS1
必须包含在其中\[
\]
(我什至不认为它与我的情况有关,但我发现了该问题中提到的相同的历史重叠效果)。
所以我改变了我的颜色:
[ -z "$TPUT" ] && TPUT=tput
RESET_ESC="\[$( $TPUT sgr0)\]"
BRIGHT_ESC="\[$( $TPUT bold)\]"
BLACK_ESC="\[$( $TPUT setaf 0)\]"
RED_ESC="\[$( $TPUT setaf 1)\]"
GREEN_ESC="\[$( $TPUT setaf 2)\]"
YELLOW_ESC="\[$( $TPUT setaf 3)\]"
BLUE_ESC="\[$( $TPUT setaf 4)\]"
MAGENTA_ESC="\[$( $TPUT setaf 5)\]"
CYAN_ESC="\[$( $TPUT setaf 6)\]"
WHITE_ESC="\[$( $TPUT setaf 7)\]"
FGDEFAULT_ESC="\[$( $TPUT setaf 9)\]"
问题(两个问题)都消失了。