컴퓨터 세상/LiNuX

프롬프트 설정

Jimin Daddy 2022. 2. 25. 12:30

프롬프트 형태를 사용자가 원하는 형태로 변경 가능
배시셸에서는 환경 변수 PS1에 프롬프트로 사용할 문자열을 저장한다.
[user1@localhost ~]$ echo $PS1
[\u@h \W]\$            -> PS1의 현재 설정 값.
위의 처럼 '\' 가 포함된 이스케이프 문자들은 화면에 그대로 출력되지 않고 셸이 문자의 의미를 해석하여 실행함.
위의 내용은 \u 는 사용자 이름, \h 는 호스트 이름 \W 는 현재 작업 디렉토리 명이다. \$ 는 $를 특수문자로 인식하지 않고 일반 문자로 출력함.

* 이스케이프 문자
  - \a : ASCII 종소리 문자(07)
  - \d : '요일 월 일' 형식으로 날짜를 표시 (ex: Thu Feb 24)
  - \e : ASCII의 이스케이프 문자로 터미널에 고급 옵션을 전달함.
  - \h : 첫 번째 .(마침표)까지의 호스트 이름 (ex: server.co.kr 에서 server)
  - \H : 전체 호스트 이름
  - \n : 줄 바꾸기
  - \s : 셸 이름
  - \t : 24 시간 형식으로 현재 시간을 표시 (ex: HH:MM:SS)
  - \T : 12 시간 형식으로 현재 시간을 표시 (ex: HH:MM:SS)
  - \@ : 12 시간 형식으로 현재 시간을 표시 (오전/오후 형식)
  - \u : 사용자 이름
  - \v : 배시셸의 버전
  - \w : 현재 작업 디렉토리 (절대 경로)
  - \W : 현재 작업 디렉토리의 절대 경로에서 마지막 디렉토리명
  - \! : 현재 명령의 히스토리 번호
  - \[ : 출력하지 않을 문자열의 시작 부분을 표시
  - \] : 출력하지 않을 문자열의 끝 부분을 표시

프롬프트를 바꾸는 것은 환경 변수 PS1에 새로운 형태의 문자열을 지정하는 것이다.
프롬프트의 끝을 표시하기 위해 마지막에 ']' 나 '$' 같은 표시를 하고 공백 문자를 하나 두는 것이 좋다.
그래야 프롬프트 문자열과 사용자가 입력한 명령이 구분된다.
아래는 현재 PS1의 값을 임시 변수에 저장해 두는 내용이다.
[user1@localhost ~]$ PROMPT = $PS1

ex) [user1@localhost ~]$ PS1='LINUX ] '        -> '=' 를 중심으로 띄어쓰기 하면 안됨.
      LINUX ]                    -> 이렇게 프롬프트가 바뀜.

      [user1@localhost ~]$ PS1='[$PWD] '     -> 현재 작업 디렉토리로 프롬프트가 변경
      [/home/junsu]             -> 이렇게 현재 디렉토리명으로 프롬프트가 바뀜.

      [user1@localhost ~]$ PS1='`uname -n` $ '  -> 특수문자 ``를 사용하게 되면 명령의 실행 결과를 나타낸다.
      localhost.localdomain $    -> 이렇게 uname -n 에 대한 명령의 실행결과로 프롬프트가 바뀜

      [user1@localhost ~]$ PS1 = '[\u \T] \!$ '
      [user1 09:29:11] 308$   -> 이렇게 사용자 이름, 현재시간(12시간), 히스토리 번호 로 프롬프트가 바뀜.

* 컬러 프롬프트 설정
  프롬프트의 색상으로 바꾸는 방법
  - 형식 : PS1 = '\[\e[x;y;nm\] 프롬프트 \[\e[x;y;0m\]'
    위의 내용을 보면 프롬프트의 첫 번째 문자 \[ 는 화면에 출력하지 않을 문자의 시작을 알려줌.
    이렇게 하지 않으면 이스케이프 문자까지 모두 카운트되어 자동 줄 바꿈이 이상하게 동작함.
    \e 는 터미널 제어를 알리는 이스케이프 문자이다.
    x;y 는 컬러번호를 나타낸다. (x는 글자색, y는 배경색을 지정)
    n은 밑줄이나 역상 표시 등 특수 기능을 나타냄.
    프롬프트 앞에서 지정한 색상과 기능은 프롬프트의 색상과 특수 효과를 나타내며,
    프롬프트 뒤의 색상은 원래 색상으로 돌아가기 위한 것임.
    이를 지정하지 않으면 이후 셸의 모든 출력이 프롬프트의 색상과 같아진다.
    특수 기능으로 역상을 이용할 때는 문자와 배경의 색상을 각각 지정해야 하며,
    역상을 이용하지 않을 때에는 한 가지 색상만 지정하면 된다.
  - 프롬프트 컬러 번호 

컬러 글자색 번호 배경색 번호
검정색 30 40
빨강색 31 41
녹색 32 42
갈색 33 43
파란색 34 44
보라색 35 45
청록색 36 46
흰색 37 47

   - 특수 기능 번호

번호 기능
0 기본 색
1 굵게
4 흑백에서 밑줄
5 반짝임
7 역상
10 기본 폰트
38 밑줄 사용 가능
39 밑줄 사용 불가능

  - 컬러 프롬프트 설정 예
    파란색으로 설정하기 (설정 후 기본 색상으로 돌아가기)
    ex) [user1@localhost ~] 138$ PS1='\e[34mLinux $\e[0;0m'       이럴 경우 프롬프트가 Linux $ (파란색) 으로 변경
    파란색 볼드로 설정하기
    ex) [user1@localhost ~]$ PS1='\e[34;1mLinux $\e[0;0m'    이럴 경우 프롬프트가 Linux $(파란색 볼드)로 변경
    밑줄 친 빨간색으로 설정하기
    ex) [user1@localhost ~]$ PS1='\e[31;4mLinux $\e[0;0m'    이럴 경우 프롬프트가 Linux $ (빨간색)으로 변경
    배경은 갈색, 글자는 보라색, 프롬프트는 '사용자명@호스트명 $'로 설정하기
    ex) [user1@localhost ~]$ PS1='e[35;43m\u@\h $\e[0;0m "\'   이럴 경우 프롬프트가 user1@localhost $ (갈색 배경, 보라색 글자)로 변경됨

* 출력하지 않을 문자열 설정 추가하기
  - 프롬프트를 컬러로 바꾸기 위해 이스케이프 문자를 사용할 때 주의할 점이 있다.
    \[ 와 \] 를 사용하여 출력되지 않을 문자를 표시해야만 언제 줄 바꿈을 해야 하는 지 배시셸이 계산할 때 프롬프트로 지정한 문자와 이스케이프 문자를 카운터에서 제외하므로, 문자 입력시 줄이 넘어가도 정상적으로 다음칸으로 이동하게 된다.
    그렇지 않을 경우 프롬프트 맨 앞으로 일부 문자가 출력되게 된다.

*** 참고로 기본 프롬프트 값은 " PS1='[\u@\h \W]\$ "  임.

 

'컴퓨터 세상 > LiNuX' 카테고리의 다른 글

파일 속성  (0) 2022.03.23
환경 설정 파일  (0) 2022.03.23
히스토리  (0) 2022.02.16
앨리어스 (alias)  (0) 2022.02.16
배시셸 환경설정  (0) 2022.02.16