(shell) 쉘 스크립트 프롬프트 변경하기

쉘에서 프롬프트를 변경할일이 있을까 싶기도 하지만 어떤 서버의 경우 요상하리 만큼 로그인후 쉘의 길이가 긴 경우가 있다. 그냥 쓰면 될껄 왜 변경하느냐 하는 분도 있겠지만 길이가 길면 터미널 창에 잘 들어오지도 않고 자바 같은 경우 실행시 좀 짜증나게 되서. 쉘 변경하는 내용을 올린다. 

어디서?

필자 같은 경우는 본인 home 디렉토리의 자기 계정내에 있는 .bashrc 에서 수행하였다. 여기서 수행한 이유는 일단은 전체적으로 같은 쉘을 쓸지 말지는 모르는 상황이어서 일단은 내 계정에 대해서는 수행하고자 .bashrc 에서 수정작업을 진행하였다. 해당 서버를 사용하는 전체에 대한 수정작업을 하고 싶다면, etc/bashrc(bash.basrc) 에서 아래의 작업을 해주면 될것으로 생각된다.(필자역시 해보진 않았다.)




어떻게?

ash84@b4c2ce95-a9bc-489d-a2b1-3c8cb0bb13f1:~$

원래 내 계정의 쉘 프로프트이다. 보기만 해도 답답하다. ash84 라는 아이디 다음에 오는 일련의 문자와 숫자들은 도데체 무엇인지 모르겠지만 일단 내가 원하는 것은 현재 계정과 경로만 표시되기를 원했다. .bashrc 를 열어서 제일 하단에 아래의 스크립트를 추가했다. 

저장한후, 닫고 나서 바로 다시 로그인을 해서 프롬프트를 확인해 보았다. 

ash84@:~$ cd nanpa/

ash84@:~/nanpa$

이상한 문자열이 없어진것을 확인 할 수가 있다. 그리고 더불어서 프롬프트의 색도 빨간색으로 변경을 하였다. 쉘쪽에서 작업을 많이하면 아무래도 검은 바탕에 약간의 색으로 구분할수 있게 하는 편이 좋아서 색도 변경하였다. 

그렇다면, PS1 과 그 문자들이 의미하는 것은 무엇일까?

프롬프트의 제어는 쉘 상에서 특별한 변수에 의해서 제어가 된다. PS1, PS2, PS3, PS4 변수가 그런것들인데, 각각의 의미하는 바는 아래와 같다. 

PS1 – Primary Prompt String(default value : \s-\v$)

PS2 – Secondary Prompt String(default value : >)

PS3 – select command를 위한 prompt

PS4 – shell script 를 디버깅 모드에서 실행시 사용되는 prompt

각각의 변수를 아래와 같이 확인해 보면 현재 어떤 변수에 어떤값이 할당되어 있는지를 알 수 있다. 

echo $PS1

여기서 우리가 대상으로 하는 것은 로그인을 한후 일반적으로 나오는 프롬프트이기 때문에 당연히 PS1을 대상으로 하였고 위에서 수정한 부분 역시 PS1을 대상으로 하였다. 자, 이제 그렇다면 PS1에 설정한 문자는 어떤 의미일까?

 설정 문자  

* 의미  *

 \a

 an ASCII bell character(07) 

 \d

 the date in “Weekday Month Date” format (e.g., “Tue May 26”)

 \D{format}

 format의 지정에 따른 date, strftime(3)

 \e

 an ASCII escape character(033)

 \h

 the hostname up to the first ‘.’

 \H

 the hostname 

 \j

 쉘에 의해서 관리되는 현재 job의 수  

 \l 쉘의 터미널 디바이스 이름의 basename 

 \n newline 

 \r carriage return 

 \s 쉘의 이름 
 \t

 24-hour, 현재시간,  HH:MM:SS

 \T

 12-hour, 현재시간, HH:MM:SS

 \@ 12-hour, 현재시간, am/pm  

 \A

  24-hour, 현재시간,  HH:MM

 \u

 현재 사용자 이름  
 \v

 bash 의 버전  

 \V

 bash 의 릴리즈

 \w 현재 working 디렉토리
 \W 현재 working 디렉토리의 basename
 ! the history number of this command 

 # the command number of this command 

 \$

 if the effective UID is 0, a #, otherwise a $ 

 \nnn

 the character corresponding to the octal number nnn

 \ backslash 
 [ begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
 ] end a sequence of non-printing characters
PS1=’[ \e [0;31m ] \u@:\w$ [ \e[m] ‘

PS1 설정한 부분에서 [0;31] 이 부분은 색을 넣은 부분은데, 색 처리에 대한 코드는 아래의 Reference 에서 색처리 관련 링크를 찾아보면 이해가 될것이다. 위의 설정에서 \u@\w 를 설정함으로써 간단하게 현재 사용자와 현재 디렉토리를 보여주고 있는 것이다. 

쉘 프롬프트 수정에 대해서 조사하면서 리눅스 쉘에 대해서 모르는게 참 많다는 생각이 들었고 .bashrc 를 통해서 다양한 작업이 가능하겠구나 하는 생각이 들었다. 쉘은 쉘일 뿐이지만 그래두 커스텀을 원하는 개발자가 있다면 참고하시길. 

*Reference *

How to : Change/Setup bash custom prompt(PS1)

– BASH Shell: Change The Color of My Shell Prompt Under Linux or UNIX