터미널 프롬프트가 올바르게 래핑되지 않습니다.

터미널 프롬프트가 올바르게 래핑되지 않습니다.

문제가 있습니다. bash에 매우 긴 명령을 입력하면 터미널이 내가 입력한 내용을 올바르게 렌더링하지 않습니다. 다음과 같은 명령이 있었으면 좋겠습니다.

username@someserver ~/somepath $ ssh -i /path/to/private/key
[email protected]

명령은 두 줄로 렌더링되어야 합니다. 대신, 일반적으로 다음과 같이 프롬프트 상단에 글을 쓰기 시작합니다.

[email protected] -i /path/to/private/key

돌아가서 일부 매개변수를 변경하기로 결정하면 커서가 어디에 나타날지 확신할 수 없습니다. 때로는 프롬프트 중간에 나타나지만 일반적으로 줄에 나타납니다.이상내가 이것을 입력하고 있는 곳.

이전 명령을 실행 하면 Up더욱 재미있는 일이 발생합니다 . 나는 gnome-terminal과 terminator는 물론 i3와 Cinnamon에서도 이것을 시도했습니다. 누군가 이것이 내 팁이라고 제안하여 여기에 있습니다.

\[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\]

Ctrll, reset, , clear다 하라는 대로 하는데 다시 명령어를 입력해도 Up똑같은 현상이 발생합니다.

확인해 보니 checkwinsizebash에서 활성화되어 있습니다. 이는 80x24 및 기타 창 크기에서 발생합니다.

이것이 내가 함께 사는 법을 배운 것입니까? 제가 알아야 할 마법이 있나요? 매우 짧은 프롬프트만 사용하기로 결정했지만 문제가 해결되지는 않습니다.

답변1

인쇄할 수 없는 시퀀스는 다음과 같아야 합니다.에 포함되어 \[있으며\]. 너를보고있는PS1그 뒤에는 닫히지 않은 시퀀스가 ​​있습니다 \W. 그러나 두 번째 항목은 중복되며 이전 문을 반복합니다."1;34".

\[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\]
                  |_____________|               |_|
                         |                       |
                         +--- Let this apply to this as well.

따라서 예상되는 색상이 있어야 합니다.

\[\033[1;32m\]\u:\[\033[1;34m\] \W \$\[\033[0m\]
                               |_____|
                                  |
                                  +---- Bold blue.

유지하다"원래"이것은 또한 작동합니다:

\[\033[1;32m\]\u:\[\033[1;34m\] \W\[\033[1;34m\] \$\[\033[0m\]
                                  |_|         |_|
                                   |           |
                                   +-----------+-- Enclose in \[ \]

편집하다:

이 문제는 bash프롬프트가 실제보다 길다고 믿기 때문에 발생합니다. 간단한 예를 들자면 다음과 같습니다.

PS1="\033[0;34m$"
       1 2345678

프롬프트는 1자가 아닌 8자로 간주됩니다. 따라서 터미널 창에 20개의 열이 있는 경우 12자를 입력한 후에는 20자로 간주되어 래핑됩니다. 백스페이스나 Ctrl+u. 9열에서 멈춥니다.

그러나 마지막 열이 아닌 이상 새 행을 시작하지 않으므로 첫 번째 행을 덮어씁니다.

계속 입력하면 해당 줄은 32자 이후 다음 줄로 넘어갑니다.

답변2

이는 대부분 터미널에서 가정한 창 크기가 실제 창 크기와 다른 것과 관련이 있습니다. bash를 사용하고 있다면 이것을 시도해 볼 수 있습니다.

$ shopt checkwinsize

당신이 얻지 못하면

checkwinsize    on

그런 다음 활성화하세요

$ shopt -s checkwinsize

그런 다음 다른 명령(예 ls: )을 실행하거나 창 크기를 한 번 조정해 보면 위의 방법이 매번 효과적이었습니다.

특히 Redhat 시스템의 경우 문제는 일반적으로 잘못된 구성 ~/.bashrc과 호출 로 인해 발생합니다 /etc/bashrc. 일반적으로 bash는 기본적으로 포함된 ~/.bashrc예상 호출을 로드합니다 ./etc/bashrcshopt -s checkwinsize

답변3

나는 한 번 어딘가 에서 \001and를 사용하여 이 문제를 해결한다는 내용 을 읽은 적이 있습니다. 그것은 나를 위해 작동합니다.\002\[\]

그건 그렇고, PS1을 정의하는 것이 추악해 보일 필요는 없습니다.

green="\001$(tput setaf 2)\002"
blue="\001$(tput setaf 4)\002"
dim="\001$(tput dim)\002"
reset="\001$(tput sgr0)\002"

PS1="$dim[\t] " # [hh:mm:ss]
PS1+="$green\u@\h" # user@host
PS1+="$blue\w\$$reset " # workingdir$

export PS1
unset green blue dim reset

답변4

COLUMNSLINES이는 & 환경 변수 설정 에 문제가 있는 것 같습니다 . 일반적으로 창 크기를 조정할 때 gnome-terminal에 의해 자동으로 설정되며(내 생각에는) 명령을 실행하여 강제로 수동으로 설정할 수 있습니다 resize.

gnome-terminal의 크기를 79x17로 조정하면 내 변수는 다음과 같습니다.

$ echo $COLUMNS; echo $LINES
79
17

다음과 같이 강제할 수 있습니다.

$ resize
COLUMNS=79;
LINES=17;
export COLUMNS LINES;

관련 정보