PS1 문제, 혼란스러운 CLI


16

간단한 PS1 과제를 수행했습니다

PS1="\e[0;31m[\W]\$ \e[m "

내가하고 싶은 것은 프롬프트 색상을 변경하고 상대 경로 만 표시하는 것입니다. 그러나 이것은 CLI를 망칩니다. 예를 들어, 기록을 찾아 볼 때 화면이 잘리고 겹칩니다. 긴 명령을 입력하면 커서가 프롬프트 디스플레이 자체와 겹치는 화면의 시작 부분으로 이동합니다. 내가 뭘 잘못 했니?

답변:


30

bash는 프롬프트가 이전보다 길다고 생각하기 때문입니다. \e[0;31m예를 들어 이스케이프 시퀀스 는 터미널에 의해 빨려 들어가 다음 텍스트를 빨간색으로 바꾸지 만 bash는 그것을 알지 못합니다. 따라서 bash에게 해당 문자 시퀀스를 프롬프트 길이로 계산해서는 안된다는 것을 bash에 알려 주어야합니다 \[ \]. 또한 터미널 이스케이프 시퀀스를 하드 코딩하는 대신 tput을 사용하는 것이 좋습니다.

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '

자세한 내용은 BashFAQ 53터미널 코드 (ANSI / VT100) 소개 를 참조하십시오.


1
당신의 완벽한 설명에 감사드립니다. 나는이 문제를 여러 번 겪었고 그 문제가 어디에 있는지 전혀 몰랐습니다.
Betlista

+1, 여기 동일합니다. 이 솔루션을 맹목적으로 테스트하고 작동하지 않는 경우 BashFAQ 링크에 함수 내에서 색상을 이스케이프 처리하는 또 다른 구문이 \001 \002있습니다.
Stephen Niedzielski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.