터미널 와이어가 올바르게 감겨 있지 않음 [중복]

터미널 와이어가 올바르게 감겨 있지 않음 [중복]

내 터미널 래퍼에 이상한 문제가 있습니다. 온라인에서 읽은 후 PS1 설정 때문일 수 있다는 것을 알았습니다. 그러나 찾아보니 사람들이 말하는 것과 일치하는 것 같아서 내가 '인지 잘 모르겠습니다. 나 뭔가 잘못하고 있는 거야 뭐.

PS1='\[\e[1;36m\]\u\[\e[m\]\[\e[0;31m\]\a@\[\e[m\]\[\e[1;36m\]\aubuntu\[\e[m\]\[\e[1;31m\]\a:~>\[\e[m\]'

무엇이 잘못될 수 있는지 알아낼 수 있는 사람이 있을까요?

이 문제를 해결하려고 시도한 한 가지 방법은 stty 열을 1000으로 설정하는 것이었지만 이로 인해 다른 많은 문제가 더 악화되었습니다(ls 및 vim 등).

답변1

PS1에 인쇄할 수 없는 모든 바이트가 포함되어 있는지 확인하십시오 \[ \]. 이는 적절하게 "이스케이프"되지 않는 한 bash가 해당 길이를 프롬프트의 전체 길이로 계산하기 때문입니다. 그런 다음 Bash는 프롬프트의 길이를 사용하여 개행이 필요한 시기를 결정합니다. 나는 이것이 너무 긴 명령으로 인해 이상한 줄 바꿈 문제를 일으키는 원인이라고 생각합니다.

또한 여기 스택 교환에서 도움이 될 만한 또 다른 것을 찾았습니다.

답변2

명확히 하기 위해 편집됨:인쇄되지 않는 색상이 잘못 이스케이프되어 과거에도 비슷한 문제가 있었습니다. 내 경우에는 각 이스케이프 시퀀스가 ​​앞에 오지 않기 때문에 \[이는 '\e'를 인식하지 못하는 것과 더 관련이 있을 수 있으므로 \e를 \033으로 대체하여 항상 [\033 in 각 [x;yzm] 앞에 색상을 나타냅니다. 대신에 이것을 \e[m\]사용할 색상을 비활성화하려고 생각합니다 (주로 모든 경우에 작동한다는 것을 알고 있기 때문입니다) 프롬프트를 구성하고 디버그하기 쉽게 만들기 "\[\033[0m\]"위해 아래에서 수행한 것과 같은 변수로 설정하는 것을 고려할 수 있습니다 . PMT_Color_Off아래에 제가 한 일의 예를 보여 드렸습니다.

이렇게 탈색을 하고 PMT_Red="\[\033[0;31m\]"있는데 논팁은 그냥Red="\033[0;31m"

내가 사용하는 색상을 끄고 메시지를 표시하지 않으 PMT_Color_Off="\[\033[0m\]"려면Color_Off="\033[0m"

내 개발 컴퓨터 중 하나에 있는 프롬프트의 작업 복사본은 다음과 같습니다.

export PS1="\[\033[01;33m\]$(ifconfig | grep "inet" | grep -v "127.0.0.1" | awk '{print $2}' | awk -F: '{print $2}') \[\033[01;32m\]\u@\h \[\033[01;34m\]\[\033[01;33m\]\w #\[\033[00m\] "

http://www.askapache.com/linux/bash-power-prompt.html또한 \e 대신 \033 이스케이프를 사용하세요.

xterm, gnome-terminal, 용어 및 프레임버퍼를 포함한 여러 터미널 에뮬레이터에서 내 프로그램을 테스트했습니다.

관련 정보