bash PS1 설정


9

PS1을 다음과 같이 구성하려고합니다.

녹색 = "\ [\ e [32; 1m \]"
빨간색 = "\ e [0; 31m"
보라색 = "\ e [0; 35m"
STARTCOLOR = "\ [\ e [40m \]"
ENDCOLOR = "\ [\ e [0m \]"
PS1 = "$ STARTCOLOR $ Green \ u @ $ Purple \ h $ Red \ w $ Green> $ ENDCOLOR"

그리고 몇 가지 질문이 있습니다.

  • "[\ e [32; 1m]"과 \ e [32; 1m "의 차이점은 무엇입니까?
  • 'PS1 내보내기'명령을 실행 한 후에는 제대로 작동하지만 약 20자를 입력하면 입력 할 때 문자를 덮어 씁니다. 이게 뭐가 문제 야?
  • STARTCOLOR (\ e [40m) / ENDCOLOR (\ e [0m)의 의미는 무엇입니까?

http://a.imageshack.us/img8/606/resultqm.jpg

추가

일부 테스트 후 다음과 같은 변경으로 문제를 해결할 수 있습니다. 즉, "\ e"형식은 "\ [\ e"형식으로 바꿔야합니다.

빨간색 = "\\ e [1; 31m"-작동하지 않습니다
빨간색 = "\ [\ e [1; 31m \]"-작동

답변:


12

프롬프트를 설정하는 도우미 기능이 있으며 이스케이프 코드 참조를 찾는 데 더 많은 시간을 보내고 싶지 않기 때문에 모든 텍스트 색상 값을 코드로 코딩했습니다.

function set_prompt ( )
{
    # Prompt setup
    # ##################

    # Black            \e[0;30m
    # Blue             \e[0;34m
    # Green            \e[0;32m
    # Cyan             \e[0;36m
    # Red              \e[0;31m
    # Purple           \e[0;35m
    # Brown            \e[0;33m
    # Gray             \e[0;37m
    # Dark Gray        \e[1;30m
    # Light Blue       \e[1;34m
    # Light Green      \e[1;32m
    # Light Cyan       \e[1;36m
    # Light Red        \e[1;31m
    # Light Purple     \e[1;35m
    # Yellow           \e[1;33m
    # White            \e[1;37m

    local COLOR_DEFAULT='\[\e[0m\]'
    local COLOR_BLACK='\[\e[0;30m\]'
    local COLOR_BLUE='\[\e[0;34m\]'
    local COLOR_GREEN='\[\e[0;32m\]'
    local COLOR_CYAN='\[\e[0;36m\]'
    local COLOR_RED='\[\e[0;31m\]'
    local COLOR_PURPLE='\[\e[0;35m\]'
    local COLOR_BROWN='\[\e[0;33m\]'
    local COLOR_GRAY='\[\e[0;37m\]'
    local COLOR_DARK_GRAY='\[\e[1;30m\]'
    local COLOR_L_BLUE='\[\e[1;34m\]'
    local COLOR_L_GREEN='\[\e[1;32m\]'
    local COLOR_L_CYAN='\[\e[1;36m\]'
    local COLOR_L_RED='\[\e[1;31m\]'
    local COLOR_L_PURPLE='\[\e[1;35m\]'
    local COLOR_YELLOW='\[\e[1;33m\]'
    local COLOR_WHITE='\[\e[1;37m\]'

    local PS1_SET_TITLE='\[\e]0;\w\a\]'

    local PS1_SET_TIME="${COLOR_DEFAULT}\t"
    local PS1_SET_RET_CODE="${COLOR_L_RED}(\$?)"
    local PS1_SET_USER="${COLOR_L_GREEN}\u@\h"
    local PS1_SET_PWD="${COLOR_YELLOW}\w"

    local PS1_LN_1="${PS1_SET_TITLE}\n"
    local PS1_LN_2="${PS1_SET_TIME} ${PS1_SET_RET_CODE} "
    local PS1_LN_2="${PS1_LN_2}${PS1_SET_USER} ${PS1_SET_PWD} ${COLOR_DEFAULT}\n"

    echo "${PS1_LN_1}${PS1_LN_2}"
}

그런 다음 다음을 수행 할 수 있습니다.

PS1=$( set_prompt )

# Use '#' for root shell
export PS1=${PS1}'$ '

unset -f set_prompt

다음은 VT100 터미널 코드를 설명하는 링크입니다. http://www.termsys.demon.co.uk/vtansi.htm

\[-비 인쇄 문자 시퀀스 시작-비 인쇄 문자
\]시퀀스 종료

  • "[\ e [32; 1m]"과 \ e [32; 1m "의 차이점은 무엇입니까?

동일하지 않으며 \[\e[32;1m\]'. Without[]` 이어야합니다 . 콘솔에서 시퀀스를 인쇄하려고 시도합니다.

  • STARTCOLOR (\ e [40m) / ENDCOLOR (\ e [0m)의 의미는 무엇입니까?

STARTCOLOR, 배경을 검은 색으로 설정하는 것을 의미합니다. ENDCOLOR는 모든 텍스트 속성을 재설정 함을 의미하며 '기본 콘솔 색상 제공'을 의미합니다.


+1 아주 좋은 !!! 이것을 내 bashrc에 복사해도
괜찮습니다.

@Ubersoldat. 전혀.
Alexander Pogrebnyak

1
\$루트와 비 루트 표시를 자동으로 전환하는 데 사용 합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

9

bash 매뉴얼에서 :

\[    비 인쇄 문자 시퀀스를 시작하여 터미널 제어 시퀀스를 프롬프트
\]    끝에 비 인쇄 문자 시퀀스에 포함시키는 데 사용할 수 있습니다.

\[\]상기 단말에 전달되지 않는다. 그들은 bash에게 그들 사이의 문자가 인쇄되지 않을 것이라고 말합니다. 그것들이 없으면 bash는 이스케이프 문자 (예 :) 다음의 시퀀스 [32;1m가 화면의 공간을 차지하지 않는다는 것을 알 수 없었습니다.

귀하의 질문에 일관성이 없었거나 Markdown의 실수 일뿐입니다. $PS1문자 그대로 표시되는 대괄호뿐만 아니라 문자 그대로의 백 슬래시-괄호 시퀀스 가 있어야합니다.

로 시작하는 이스케이프 시퀀스 \e는 터미널 에뮬레이터에 의해 해석됩니다. 이들은 Xterm 제어 시퀀스 (ctlseqs) 문서에 문서화되어 있습니다 (다른 터미널 에뮬레이터는 대부분 호환되는 경향이 있습니다). 예를 들어 \e[32;1m굵은 녹색 전경으로 전환합니다. \e[40m배경색을 검은 색으로 전환합니다. \e[0m기본 속성을 복원합니다.


3

대부분의 최신 터미널 에뮬레이터는 ANSI 이스케이프 코드를 사용하여 디스플레이의 다양한 측면을 제어 할 수 있습니다.

대부분의 ANSI 코드는 2 문자 코드 ESC- [이스케이프 문자 (ASCII 10 진수 27)로 시작하고 그 뒤에 열린 대괄호 문자가옵니다. 이 시퀀스는 CSI 또는 Control Sequence Initiator라고도합니다.

이스케이프 문자는 직접 입력 할 수있는 문자가 아니기 때문에 직접 입력 할 수 있습니다 (Esc 키에는 다른 응용 프로그램에 따라 다름). bash는 '\ e'를 사용하여 참조합니다.

텍스트 색상을 변경하면 ANSI Set Graphics Mode 명령이 사용됩니다.

\e[<value>m

여기서 <value>세미콜론 ( ;) 으로 구분 된 값 목록이 될 수 있습니다 . 굵은 속성이 색상 속성과 함께 유용하지만 일반적으로 하나의 값만 사용됩니다.

Alexander Pogrebnyak의 답변에 나열된 값을 보면 세미콜론 앞의 0 또는 1은 굵게 표시됩니다.

\e[1m  # bold
\e[5m  # blink
\e[0m  # all attributes off

여기에 유용한 코드 목록이 있습니다 http://ascii-table.com/ansi-escape-sequences.php

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.