리눅스 : bash 프롬프트를 채색하면 캐리지 리턴이 중단됩니다.


24

bash프롬프트를 다음과 같이 채색하려고 하면 :

export PS1="\e[0;31m[\u@\h \W]\$ \e[m "

줄이 꽉 찼을 때 새 줄로 이동하지 않고 같은 줄에서 시작하여 입력 텍스트를 지 웁니다.

색상 순서를 제거하면 정상적으로 작동합니다.
우분투 11.10과 터미널을 사용합니다 (구이 크에도 같은 버그가 있습니다).


이상한. RedHat 5 및 Mac OS X에서 문제없이 작동합니다.
Matteo

답변:


43

'readline'이 프롬프트의 표시 길이를 올바르게 계산하려면 \[및 사이에 모든 이스케이프 시퀀스를 래핑해야합니다 \]. 그것들이 없으면 'readline'은 프롬프트가 이전보다 길고 텍스트가 여백에 도달 한 시점을 알지 못한다고 생각합니다.

PS1 = " \ [ \ e [; 31m \] [\ u @ \ h \ W] \ $ \ [ \ e [m \] "

4
정말 감사합니다!! 나는 공식 문서에서 그것에 대한 문서를 찾으려고했지만 불가능했습니다. '주식'컬러 프롬프트는이 '트릭'을 사용하며 처음에는 정확히 무엇인지 파악하는 데 어려움을 겪었습니다. up --- btw 나는 실제로 684 번째 줄의 'man readline 3'에서 문서 소스를 찾았으며 실제로 이것이 문서의 위치를 ​​알고 싶어하는 사람들을 위해 'skip-csi-sequence'라고합니다. 나는 전에 연결에 대해 알지 못했지만 readline (3)으로 나를 가리 키지 않고 그것을 찾지 못했을 것이라고 생각합니다.
osirisgothra

"포장"은 무엇을 의미합니까? 당신은 전체를 감싸 의미합니까 IN\[ , \]? 나는 그렇게 생각하지만 그것은 나를 위해 작동하지 않는 것 같습니다.
Max Howell

2
@osirisgothra : 문서는 실제로 다른 것에 대해 이야기하고 있습니다 – 특수 키에 의해 생성 된 입력 시퀀스 skip-csi-sequence를 억제하기위한 것 입니다.
grawity

1
@MaxHowell \e[xxm은 전체 문자열이 아닌 각 시퀀스 를 래핑해야 합니다.
Enrico

감사. 내 경우에는 방금 교체 \e[39m하여 \[\e[;39m\]잘 작동합니다.
Herrgott

1

[및] 팁은 OS X 10.8.2의 bash에서도 작동했습니다.

나는 사용한다:

PS1 = "[\ e [0; 37m \ W \ $ (git branch 2> / dev / null | grep -e '*'| sed 's / ^ .. (. *) / {\ 1} /') \ $ \ e [m] "

현재 사용중인 git 브랜치를 보여줍니다.


"__git_ps1"에 대해 알고 있습니까?
rafak

nopes. 어떤 마법의 일을합니까?
stonefruit 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.