백스페이스는 Bash 프롬프트를 삭제합니다.

백스페이스는 Bash 프롬프트를 삭제합니다.

최근에 변수를 통해 Bash 프롬프트를 수정하여 $PS1색상을 지정할 수 있었습니다. 내 파일에 있습니다 .bashrc:

PS1="\\[\e[0;32m[\h::\W] >>\e[m "

이제 무언가를 입력한 다음 이를 지우기 위해 백스페이스를 실행해야 하면 전체 프롬프트가 사라집니다. Enter를 누르면 새로운 것이 나타납니다.

보고 있다이 질문은 같은 문제에 관한 것입니다.닫는 괄호가 누락된 것 같습니다. 하지만 어디로 갈지는 모르겠습니다.

답변1

처음에는 백슬래시가 큰따옴표 내에서 자체적으로 벗어날 것이라고 생각했는데 그게 문제였습니다. 그러나 다시 생각해 보면 "\\["이것이 '\['사실이 아니게 됩니다. 그렇게 작동할 것입니다.

그러나 실제 문제는 readline얼마나 많은 문자가 화면에 그려지고 얼마나 많은 문자가 터미널 탈출로 가로채는지 알지 못하는 것입니다. 실제로 그럴 가능성이 크다.아니요프롬프트는 기본적으로 큰따옴표로 묶인 문자열로 구성되어 있으므로 프롬프트가 이미 인쇄되어 있습니다.

그래서 제가 댓글에서 지적한 것처럼 시퀀스를 꺼야 합니다. 이 \[메소드는 프롬프트에서 인쇄되지 않는 이스케이프 시퀀스를 시작합니다. 이는 readline화면에 그려지는 문자 수를 추적합니다. 또한 다음과 같이 종료해야 합니다.

PS1='\[non-printing terminal escapes here\]' 

man bash 2>/dev/null | grep '^ *\\\[' -A5

\[     begin  a  sequence  of   non-printing
       characters,  which  could  be used to
       embed  a  terminal  control  sequence
       into the prompt
\]     end  a sequence of non-printing char‐
       acters

관련 정보