PS1에 넓은 유니코드 문자가 포함되어 있으면 Bash가 이상하게 동작합니다.

PS1에 넓은 유니코드 문자가 포함되어 있으면 Bash가 이상하게 동작합니다.

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)\]"

문제(두 문제 모두)가 사라졌습니다.

관련 정보