리눅스/유닉스 사용자들이라면, 많은 시간 쉘에서 작업을 한다:
여러분이 root라면, "prestige" 버전을 사용할 수 있을 것이다:
이러한 프롬프트들은 솔직히 말해서 별로다. 많은 리눅스 배포판들이 색상과 부팅 정보를 추가하여 디폴트 프롬프트를 업그레이드
한다는 것은 이상한 일이 아니다. 배포판에 멋지고 다양한 색상의 프롬프트가 있지만 완벽하지는 않다. 몇 개의 색상을 추가하거나
변경하거나 또는 프롬프트 그 자체에서 정보를 추가하거나 제거하고 싶을 것이다. 자신만의 색깔을 입히고 트릭을 가한 프롬프트를
만드는 것은 어렵지 않다.
위로
프롬프트 기초
배쉬에서, PS1 환경 변수의 값을 변경하여 프롬프트를 설정할 수 있다:
변경 즉시 효력이 나타나고, ~/.bashrc 파일에 "export" 정의를 주어서 영구적인 것으로 할 수 있다. PS1에는 여러분도 좋아할 만한 플레인 텍스트가 포함되어 있다:
$ export PS1="This is my super prompt > " This is my super prompt >
|
많은 정적 텍스트를 갖고 있는 프롬프트를 유용하지 않다. 대부분의 커스톰 프롬프트에는 현재의 사용자 이름, 작업중인
디렉토리, 호스트 이름 같은 정보가 포함되어 있다. 이러한 정보들은 쉘 내부를 탐구하는데 도움이 된다. 예를 들어, 다음의
프롬프트는 사용자 이름과 호스트 이름을 디스플레이 한다:
$ export PS1="\u@\H > " drobbins@freebox >
|
이 프롬프트는 특별히 다양한 계정으로 다양한 머신에 로그인하는 사람들에게 편리하다. 어떤 머신을 실제로 사용하고 있고 현재 어떤 권한을 가지고 있는지를 알려주는 리마인더(reminder)로서 작용하기 때문이다.
위 예제에서, 배쉬에게 사용자 이름과 호스트 이름을 프롬프트로 인서트하라고 명령했다. 특별한 백슬래쉬-이스케이프 문자
시퀀스를 사용했다. 다음은 배쉬가 인식하는 모든 시퀀스 리스트이다 (배쉬 맨 페이지의 "PROMPTING" 섹션에서 리스트를 찾을
수 있다.):
| 시퀀스 |
설명 |
| \a |
ASCII bell 문자 (\007) |
| \d |
"Wed Sep 06" 의 날짜(date) |
| \e |
ASCII escape 문자 (\033) |
| \h |
호스트 이름의 첫 번째 부분( "mybox") |
| \H |
전체 호스트 이름 ("mybox.mydomain.com") |
| \j |
^Z를 눌러서 쉘에서 중지시킨 프로세스의 수 |
| \l |
쉘의 터미널 디바이스의 이름 ("ttyp4") |
| \n |
Newline |
| \r |
캐리지 리턴 |
| \s |
쉘 실행파일의 이름 ("bash") |
| \t |
24 시간 포맷의 시간 ("23:01:01") |
| \T |
12 시간 포맷의 시간 ("11:01:01") |
| \@ |
am/pm이 있는 12시간 포맷 |
| \u |
사용자 이름 |
| \v |
배쉬 버전 (2.04) |
| \V |
패치 레벨이 포함된 배쉬 버전 |
| \w |
현재 작업중인 디렉토리 ( "/home/drobbins") |
| \W |
현재 작업중인 디렉토리의 "basename" ("drobbins") |
| \! |
히스토리 버퍼에서의 현재 명령어 포지션 |
| \# |
명령어 넘버 |
| \$ |
root가 아닐 경우, "$"를 삽입하라; root라면, "#"를 얻는다 |
| \xxx |
세자리 숫자 xxx에 근거한 ASCII 문자를 삽입한다. ("\007"처럼 사용되지 않은 숫자는 0으로 대체한다.) |
| \\ |
백슬래쉬 |
| \[ |
커서를 움직이지 않는 문자 시퀀스 앞에 위치한다. 배쉬가 단어 래핑을 정확히 수행할 수 있도록 한다. |
| \] |
non-printing 문자 시퀀스 뒤에 나타난다. |
위로
색깔입히기(Colorization)
색깔 추가는 쉽다; 첫 번째 단계는 컬러 없이 프롬프트를 디자인 하는 것이다. 그런 다음에는 터미널(배쉬가 아닌)에 의해서
인식될 특별한 이스케이프 시퀀스를 추가한다. 표준 리눅스 터미널과 X 터미널로 foreground (text) 컬러와
background 컬러를 설정할 수 있다. 그리고 원한다면 볼드(bold) 문자도 가능하다. 8개의 컬러를 선택할 수 있다.
컬러는 PS1에 특별한 시퀀스를 추가함으로서 선택된다. 기본적으로 "\e["와 "m"사이에 숫자를 넣는다. 숫자 코드를 하나 이상 지정하려면 세미 콜론으로 각 코드를 구별해야 한다. 다음은 컬러 코드 예제이다:
숫자 코드로 0을 지정 할 때 이것은 터미널에게 디폴트 값으로 foreground, background, 볼드 세팅을 재설정하도록 명령한다. 이제 컬러 코드들을 살펴보자:
컬러 챠트
이 챠트를 사용하기 위해서, 사용하기 원하는 컬러를 찾고 그에 해당하는 foreground (30-37)와
background(40-47) 숫자들을 찾는다. 예를 들어, 일반적인 검정색 background에 녹색을 원하면 숫자는 32와
40이다. 그리고나서, 프롬프트를 정의하고 적당한 컬러 코드를 추가한다:
는 다음과 같이 된다:
export PS1="\e[32;40m\w> "
|
지금까지는 좋았다. 아직까지는 완벽하지 않다. 배쉬가 작업중인 디렉토리를 프린트 한 후에 "\e[0m" 시퀀스로 다시 컬러를 정상적으로 세팅해야한다:
export PS1="\e[32;40m\w> \e[0m"
|
이 정의는 보기 좋은 녹색 프롬프트를 만들것이다. 하지만 몇 가지 마무리 손질을 해야 한다. 40의 백그라운드 컬러 세팅을
포함 할 필요가 없다. 이것은 디폴트 컬러인 검정으로 백그라운드를 세팅하기 때문이다. 또한 녹색은 매우 희미하다; 컬러 코드
"1" 을 추가하여 이것을 픽스할 수 있다. 색깔이 더욱 밝아지고 볼드 텍스트가 된다. 이러한 변화에 더하여, 모든
non-printing 문자들을 배쉬 이스케이프 시퀀스 (\[와 \])안에 넣어야 한다. 이러한 시퀀스들은 배쉬에게 괄호안에 있는
문자들이 라인에서 공간을 차지하지 않도록 명령한다. 다음은 최종 프롬프트이다:
export PS1="\[\e[32;1m\]\w> \[\e[0m\]"
|
같은 프롬프트에 여러 색상을 사용하는 것에 대해 겁먹지 말라:
export PS1="\[\e[36;1m\]\u@\[\e[32;1m\]\H> \[\e[0m\]"
|
위로
Xterm 즐기기
프롬프트에 정보와 컬러를 추가하는 방법을 설명했다. 더 복잡한 일도 할 수 있다. X 터미널 (rxvt 또는 aterm)의
타이틀바가 동적으로 업데이트 되도록 하는 특별한 코드를 프롬프트에 추가할 수 있다. 다음의 시퀀스를 PS1 프롬프트에 추가하면
된다:
"titlebar"를 xterm의 타이틀바에 나타내고 싶은 텍스트로 바꾼다. 정적 텍스트를 사용 할 필요가 없다; 배쉬 이스케이프 시퀀스를 타이틀바에 삽입할 수 있다. 다음 예제를 보자:
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
|
이것은 위의 스크린샷에 사용했던 프롬프트이다. 이 프롬프트가 개인적으로 마음에 든다. 왜냐하면 이것은 모든 정보를 터미널이
아닌 타이틀바에 놓았기 때문이다. 타이틀바 시퀀스를 "\[" 과 "\]" 안에 반드시 넣어야 한다. 터미널이 관련되어 있는한 이
시퀀스는 "non-printing"이기 때문이다. 많은 정보를 타이틀바에 넣을 때의 문제점은, 시스템 콘솔처럼 "비
그래픽(non-graphical)" 터미널을 사용한다면 정보를 볼 수 없다는 것이다. 이러한 문제를 픽스하기 위해 .bashrc에
다음과 같은 것을 추가할 수 있다:
if [ "$TERM" = "linux" ] then #we're on the system console or maybe telnetting in export PS1="\[\e[32;1m\]\u@\H > \[\e[0m\]" else #we're not on the console, assume an xterm export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] " fi
|
배쉬 조건문은 현재 터미널 세팅에 기초하여 프롬프트를 동적으로 설정할 것이다. ~/.bash_profile을 설정하여 시작할
때 ~/.bashrc을 소싱하도록 한다. 다음의 라인은 반드시 ~/.bash_profile에 있어야 한다:
이것으로 인해 로그인 쉘이나 비 로그인 쉘 중 어떤 것으로 시작하든지 같은 프롬프트 세팅이 된다.
참고자료
필자소개
Daniel Robbins는 Gentoo Technologies, inc.의 CEO이다. PC용 고급 Linux인 Gentoo Linux의
창설자이자, 차세대 Linux 포트 시스템인 Portage 시스템의 창시자이다. 또한 Macmillan사에서 출판하는
Caldera OpenLinux Unleashed, SuSE Linux Unleashed, Samba Unleashed 등에
기고활동을 하고 있다.