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
.