간단한 PS1 과제를 수행했습니다
PS1="\e[0;31m[\W]\$ \e[m "
내가하고 싶은 것은 프롬프트 색상을 변경하고 상대 경로 만 표시하는 것입니다. 그러나 이것은 CLI를 망칩니다. 예를 들어, 기록을 찾아 볼 때 ↑
화면이 잘리고 겹칩니다. 긴 명령을 입력하면 커서가 프롬프트 디스플레이 자체와 겹치는 화면의 시작 부분으로 이동합니다. 내가 뭘 잘못 했니?
답변
bash는 프롬프트가 이전보다 길다고 생각하기 때문입니다. \e[0;31m
예를 들어 이스케이프 시퀀스 는 터미널에 의해 빨려 들어가 다음 텍스트를 빨간색으로 바꾸지 만 bash는 그것을 알지 못합니다. 따라서 bash에게 해당 문자 시퀀스를 프롬프트 길이로 계산해서는 안된다는 것을 bash에 알려 주어야합니다 \[ \]
. 또한 터미널 이스케이프 시퀀스를 하드 코딩하는 대신 tput을 사용하는 것이 좋습니다.
red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '
자세한 내용은 BashFAQ 53 및 터미널 코드 (ANSI / VT100) 소개 를 참조하십시오.