Bash가 프롬프트 길이를 올바르게 계산할 수 없습니다

Bash가 프롬프트 길이를 올바르게 계산할 수 없습니다

이 문제에 대해 Google에서 많이 검색한 결과 다음과 같은 관련 질문을 발견했습니다.터미널 프롬프트가 올바르게 래핑되지 않습니다..

내 문제는 bash가 프롬프트의 길이를 올바르게 계산하지 않아서 내가 다음과 ctrl같은 작업을 수행 r하거나 기록을 스크롤할 때 문제가 발생한다는 것 입니다. 이것은 기본적으로 (색상 없이) 보이는 모습입니다.

✔ name@machine ~

01:09 $

예를 들어 위쪽 화살표를 사용하여 이전 명령을 스크롤하면 특정 문자가 프롬프트에서 멈춥니다.

✔ name@machine ~

01:09 $m

때로는 일부 프롬프트를 덮어쓰는 등 다른 이상한 동작이 발생하기도 합니다(다시 로드하면 모든 프롬프트가 사라짐). 내 팁은 다음과 같습니다.

GIT_PROMPT_START_USER="\n_LAST_COMMAND_INDICATOR_ \[$Magenta\]\u\[$Orange\]@\[$White\]\h \[$Yellow\]\[$PathShort\]\[$ResetColor\]"

GIT_PROMPT_END_USER="\n\[$Blue\]$Time12a\[$ResetColor\] $ "

내가 사용하는 것은 다음과 같습니다 git-bash-prompt: >https://github.com/magicmonty/bash-git-prompt>.

내가 엉망이라고 생각하는 것은 다른 파일에 정의된 시간 변수입니다.

Time12a="\$(date +%H:%M)"

나는 시도했지만 그들 \[$Time12a\]중 누구도 작동하지 않는 것 같습니다. 내 생각 엔 5자(hh:mm)를 나타내기 때문에 bash가 잘못 계산한 것 같습니다 .$Time12aGIT_PROMPT_END_USER$Time12a

bash는 이 길이를 어떻게 계산합니까? Bash에서 길이를 명시적으로 설정할 수 있습니까? 답변해 주셔서 정말 감사합니다!

답변1

그래서 무엇이 엉망인지 알아냈는데, 예상했던 것과는 달랐습니다 :)

실제로 bash는 \[$ResetColor\]를 사용하여 어떤 이유로 한 단계 앞으로의 길이를 계산합니다(bash는 내 프롬프트가 한 단계 너무 길다고 생각합니다).

이 변수는 다른 모든 색상과 함께 "bash-git-prompt"에 의해 정의됩니다(보려면 질문의 git-repo 링크를 참조하세요). 어쨌든 수정은 쉽습니다. 나는 그들의 정의를 내 정의로 재정의했습니다.

ResetColor=$(tput sgr0)

안정적인!

(그런데 다른 사람이 이 문제를 겪을 경우를 대비하여 $COLOR=$(tput setaf X) 를 사용하여 내 정의에 사용된 다른 모든 색상을 재정의했습니다. 여기서 COLOR는 원하는 색상이고 X는 xterm-256의 색상입니다. ).

관련 정보