이 PS1 값이 예상치 못한 동작을 일으키는 이유는 무엇입니까? [복사]

이 PS1 값이 예상치 못한 동작을 일으키는 이유는 무엇입니까? [복사]

중복 가능성:
기록 검색 시 bash 프롬프트에 문제가 발생하는 이유는 무엇입니까?

PS1변수를 .bashrc다음과 같이 설정 했습니다 .

PS1='\e[35m[\W]:\e[0m '

cwd의도한 대로 수행되지만( []내부 프롬프트와 이전에 표시된 프롬프트의 색상 변경 :) 명령 기록을 검색할 때 반복하는 명령의 일부가 프롬프트에 첨부되는 경우가 있습니다. 예를 들어:

[~]: echo "something"
something
[~]: date
Sun Nov 18 17:07:54 PST 2012
[~]: sudo apt-get install vim
...

이제 명령을 반환하고 싶다고 가정 echo "something"하고 을 누르고

[~]: sudo apt-get install vim

다시 누르면 이런 일이 발생합니다

[~]: sudo apt-date

다시 일어나

[~]: sudo apt-echo "something"

백스페이스를 눌러 명령줄의 모든 내용을 삭제하면 다음까지 모두 삭제됩니다.

[~]: sudo apt-

명령에는 영향을 미치지 않습니다. 예를 들어, 해당 행은 [~]: sudo apt-date여전히 date​​등의 출력을 인쇄합니다. 왜 이런 일이 발생하며 부작용 없이 원하는 힌트를 얻을 수 있는 방법은 무엇입니까?

답변1

무슨 일이 일어나고 있는지 Bash가 프롬프트에 인쇄할 문자 수로 인해 혼란을 겪고 있다는 것입니다. 명령 기록 등에 대한 커서의 위치를 ​​올바르게 지정하기 위해 커서 위치 지정 시퀀스를 터미널로 보냅니다. 프롬프트를 인쇄한 후에는 커서가 실제로 어디에 있는지 명확히 알 수 있어야 합니다.

프롬프트를 다음과 같이 설정해 보세요.

PS1='\[\e[35m\][\W]:\[\e[0m\] '

이제 예상대로 작동할 것입니다.

\[쌍은 \]Bash에게 그들 사이에 있는 것은 인쇄되지 않는 이스케이프 시퀀스이며 실제로 커서를 앞으로 이동하지 않을 것임을 알려줍니다. 그런 다음 명령 기록을 탐색하는 동안 커서 위치를 올바르게 추측하고 올바른 대체를 수행합니다.

이 정보는 정보 노드에서 찾을 수 있습니다.(bash)Printing a Prompt.

편집하다:최신 버전의 bash에서는 다음과 같이 변경되었습니다.(bash)Controlling the Prompt.

관련 정보