2016-10-21 4 views
0

PS1 프롬프트를 함수의 출력으로 설정하고 싶지만 ANSI 색 시퀀스를 포함하려고하면 bash는 선 길이가 더 길다고 생각합니다 새로운 라인으로 가기 위해 충분히 타이핑 할 때 실제로 엉망진창이다.함수의 결과에서 bash PS1 프롬프트를 어떻게 색칠합니까?

ps1() { 
    echo -ne "\033[01;34m$(dirs -0)\033[0m \$ " 
} 
PS1='$(ps1)' 

답변

0

는 이스케이프 시퀀스 주위 \[\]을 넣어 : 다음과 같은 코드가 어떻게 표시되는지를 보여줍니다. 이것은 프롬프트의 너비를 결정할 때 쉘이 쉘을 계산하지 않도록 지시합니다.

ps1() { 
    echo -ne "\\[\033[01;34m\\]$(dirs -0)\\[\033[0m\\] \$ " 
} 

이 프롬프트에서 사용할 수있는 모든 특수 시퀀스 Bash Prompt Escape Sequences을 참조하십시오 (예를 들어, 대신 $(dirs -0)의 현재 디렉토리 탈출\w에 대한 \e 대신 \033을 사용할 수 있습니다).

echo -e에 의해 먹지 않도록하려면이 시퀀스의 백 슬래시를 두 배로 늘려야합니다. 그러나 위의 페이지에 나열된 이스케이프 시퀀스를 사용하는 경우 bashPS1 자체의 이스케이프 시퀀스를 처리하므로 실제로는 -e이 필요하지 않습니다.

+0

이것은 나를 위해 작동하지 않습니다. PS1 = '\\ [... \\]'에서만 작동합니다. – Jake

+0

'echo -e'가 이스케이프 시퀀스를 해석하려고 시도했기 때문입니다. – Barmar

+0

내 대답이 업데이트되었습니다. – Barmar