Bash는 첫 번째 줄을 덮어씁니다. PS1 bash 프롬프트

Bash는 첫 번째 줄을 덮어씁니다. PS1 bash 프롬프트

저는 bash에서 PS1과 PROMPT_COMMAND를 사용하여 zsh 스타일에 맞는 프롬프트를 생성하고 있습니다. 해결책이 있어요거의일하다.

문제는 긴 입력 줄을 쓰면 두 번째 줄이 첫 번째 줄을 덮어쓴다는 것입니다. 세 번째 줄은 새 줄에 멋지게 표시됩니다.

커서 이동으로 인해 일부 행 카운터가 1씩 감소할 수 있습니까? 아니면 이것이 제한 사항/버그입니까?

간단한 예:

export PS1="prompt>\[\033[s\033[10C\]test\[\033[u\]"

인쇄 prompt>, 위치 저장, 왼쪽으로 10자 이동, 인쇄 test, 위치 복원.

프롬프트는 좋아 보였고 두 줄 이상의 텍스트를 작성할 때까지 완벽하게 작동했습니다.

예 1, 예상되는 동작:

------------------------------------
prompt>          test
prompt>ls        test
files...
prompt>1 2 3 4 5 6 7 8 9 10 11 12 13
14 15 16 17 18 19 20 21 22 23 24 25
26 27 28

예 2, 현재 동작:

------------------------------------
prompt>          test
prompt>ls        test
files...
14 15 16 17 18 19 20 21 22 23 24 253
26 27 28

답변1

아, 물론이죠. 테스트는 보이는 문자로 처리되어서는 안 되며 \[와 사이에 포함되어야 합니다 \].

실제 사례:

export PS1="prompt>\[\033[s\033[10Ctest\033[u\]"

그 이유는 bash가 test를 보이는 문자로 계산하는 경우 커서 계산과 현재 행에서 사용 가능한 나머지 문자가 4자("test"의 길이)만큼 어긋나면 떠났다고 가정하기 때문입니다.

관련 정보