(shell) 쉘 스크립트 프롬프트 변경하기
쉘에서 프롬프트를 변경할일이 있을까 싶기도 하지만 어떤 서버의 경우 요상하리 만큼 로그인후 쉘의 길이가 긴 경우가 있다. 그냥 쓰면 될껄 왜 변경하느냐 하는 분도 있겠지만 길이가 길면 터미널 창에 잘 들어오지도 않고 자바 같은 경우 실행시 좀 짜증나게 되서. 쉘 변경하는 내용을 올린다.
어디서?
필자 같은 경우는 본인 home 디렉토리의 자기 계정내에 있는 .bashrc 에서 수행하였다. 여기서 수행한 이유는 일단은 전체적으로 같은 쉘을 쓸지 말지는 모르는 상황이어서 일단은 내 계정에 대해서는 수행하고자 .bashrc 에서 수정작업을 진행하였다. 해당 서버를 사용하는 전체에 대한 수정작업을 하고 싶다면, etc/bashrc(bash.basrc) 에서 아래의 작업을 해주면 될것으로 생각된다.(필자역시 해보진 않았다.)
어떻게?
원래 내 계정의 쉘 프로프트이다. 보기만 해도 답답하다. ash84 라는 아이디 다음에 오는 일련의 문자와 숫자들은 도데체 무엇인지 모르겠지만 일단 내가 원하는 것은 현재 계정과 경로만 표시되기를 원했다. .bashrc 를 열어서 제일 하단에 아래의 스크립트를 추가했다.
저장한후, 닫고 나서 바로 다시 로그인을 해서 프롬프트를 확인해 보았다.
이상한 문자열이 없어진것을 확인 할 수가 있다. 그리고 더불어서 프롬프트의 색도 빨간색으로 변경을 하였다. 쉘쪽에서 작업을 많이하면 아무래도 검은 바탕에 약간의 색으로 구분할수 있게 하는 편이 좋아서 색도 변경하였다.
그렇다면, PS1
과 그 문자들이 의미하는 것은 무엇일까?
프롬프트의 제어는 쉘 상에서 특별한 변수에 의해서 제어가 된다. PS1
, PS2
, PS3
, PS4
변수가 그런것들인데, 각각의 의미하는 바는 아래와 같다.
각각의 변수를 아래와 같이 확인해 보면 현재 어떤 변수에 어떤값이 할당되어 있는지를 알 수 있다.
여기서 우리가 대상으로 하는 것은 로그인을 한후 일반적으로 나오는 프롬프트이기 때문에 당연히 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