2013-11-22 3 views
1

셸 프롬프트에 일부 동적 정보를 쓰는 명령을 실행하고 싶습니다. 내가 정적으로 착색을한다면 난 그냥 탈출 문장 전후 \[\]을 넣을 수 있기 때문에, 잘 작동 : Bash에서 PS1의 올바른 줄 바꿈

'\[\e[0;91m\]$(printSomething)\[\e[0m\]' 

그러나

착색은 동적이며, 나는 다음, 외부 스크립트를 인쇄하려면 작동하지 않습니다. 이제는 PS1에 직접 이스케이프 시퀀스를 쓸 수 없습니다. 그러나 외부 스크립트가 \[\]을 인쇄하면 쉘은 문자 그대로 표시합니다.

작동하도록 만드는 방법이 있습니까?

+0

"동적 색 구성표"와 "인쇄용 외부 스크립트"는 무엇을 의미합니까? –

+0

명령 프롬프트 데이터를 인쇄하는 외부 스크립트도 데이터에 따라 다르기 때문에 색칠 이스케이프 시퀀스를 인쇄합니다. – petersohn

+0

스크립트는 어떻게 명령 프롬프트를 인쇄합니까? 에코? 'readline'? 대화 형 셸을 실행하고 있습니까? –

답변

2

디스플레이 할 때마다 PROMPT_COMMAND을 사용하여 PS1을 재설정하십시오. 원래의 메시지를 보려면 :

prompt_cmd() { 
    PS1='\[\e[0;91m\]' 
    PS1+=$(printSomething) 
    PS1+='\[\e[0m\]' 
} 

PROMPT_COMMAND=prompt_cmd 

다른 색상을 원한다고 생각합니다.

prompt_cmd() { 
    PS1="\[\e[0;${PROMPT_COLOR}m\]" # note the double quotes 
    PS1+=$(printSomething) 
    PS1+='\[\e[0m\]' 
} 

을하거나 사용할 색상 결정하는 prompt_cmd 자체에 약간의 코드를 실행할 수 있습니다이를 위해 prompt_cmd이 읽는 당신은 몇 가지 환경 변수를 가질 수있다.