2009. 3. 18. 10:03

예쁜 쉘 프롬프트



예전에 쓰던 리눅스 쉘프롬프트를 다시 사용하고 싶어서 검색하던 도중 원하는 쉘 프롬프트에 대한 포스트를 예전에 같은 회사에서 일을 하셨던 훌륭한 강과장님의 블로그에서.. ^^; 발견할 수 있었다.
하기야.. 이분이 쓰던것을 따라 사용했었으니깐.. 당연한 것인가?

대략 이런 모습을 한 쉘 프롬프트이다. 예쁘당~


사용하려면 다음과 같이 설정을 해주면 된다.

.prompt 라는 녀석을 하나 만들어 준다. 뭐 다른 이름이라도 상관은 없지.. -_-
$ vi .prompt
## color variables
         RED="\[\033[0;31m\]"
       GREEN="\[\033[0;32m\]"
        BLUE="\[\033[0;34m\]"
        CYAN="\[\033[0;36m\]"
     MAGENTA="\[\033[0;35m\]"
      YELLOW="\[\033[0;33m\]"
       BLACK="\[\033[0;30m\]"
        GRAY="\[\033[0;37m\]"
       WHITE="\[\033[0;38m\]"
   LIGHT_RED="\[\033[1;31m\]"
  LIGHT_GREEN="\[\033[1;32m\]"
  LIGHT_BLUE="\[\033[1;34m\]"
  LIGHT_CYAN="\[\033[1;36m\]"
LIGHT_MAGENTA="\[\033[1;35m\]"
LIGHT_YELLOW="\[\033[1;33m\]"
  LIGHT_WHITE="\[\033[1;37m\]"
    NO_COLOR="\[\033[0m\]"

HOSTNAME_SHORT=${HOSTNAME%%.*}
TTY=$(tty); TTY=${TTY#/dev/}

## set shell prompt
shopt -s checkwinsize
PROMPT_UPDATE() {
   case "$PWD" in
       $HOME*) PWD_SHORT="${PWD/$HOME/~}" ;;
       *)      PWD_SHORT="$PWD" ;;
   esac
   PS1="($LOGNAME@$TTY@$HOSTNAME_SHORT)-($PWD_SHORT)"
   if [ ! -n "$COLUMNS" ]; then
       local fillsize=0
   else
       local fillsize=$((${COLUMNS}-${#PS1}))
   fi
   local fill=""
   if [ $fillsize -gt 0 ]; then
       while [ $((${#PROMPT_FILL})) -lt ${COLUMNS} ]; do
           PROMPT_FILL="$PROMPT_FILL-"
       done
       fill="${PROMPT_FILL:0:${fillsize}}"
   elif [ $fillsize -lt 0 ]; then
       fill=""
       local prefix=${PWD_SHORT:0:5}
       local PWD_SHORT="$prefix..${PWD_SHORT:$((2+${#prefix}-${fillsize}))}"
   fi
   PS1="\
$NO_COLOR($RED$LOGNAME$NO_COLOR@$GREEN$TTY$NO_COLOR@$BLUE$HOSTNAME_SHORT$NO_COLOR)$CYAN-$fill$NO_COLOR($MAGENTA$PWD_SHORT$NO_COLOR)$NO_COLOR\r\n($YELLOW\#$NO_COLOR)\\$ "
}

## set PROMPT_COMMAND
PROMPT_COMMAND=PROMPT_UPDATE
PS2="> "
PS4="+ "

## append a xterm's dynamic title command for some terminal types
case $TERM in
   xterm* | cygwin* | screen* | vt*)
   ## Xterm Title
   XTERM_TITLE() {
       echo -ne "\033]0;"
       [ "$LOGNAME" != "netj" ] && echo -n $LOGNAME@
       echo -n $HOSTNAME_SHORT: $PWD_SHORT
       echo -ne "\007"
   }
   # change Xterm title
   export PROMPT_COMMAND="$PROMPT_COMMAND; XTERM_TITLE"
   ;;
esac

# set PROMPT_DATE if not set
# from 2.05b, bash supports custom date formats with \D{...}
PROMPT_DATE=${PROMPT_DATE:-"`date '+%Y-%m-%d %a %T'`"}
PROMPT_DATEFMT=${PROMPT_DATEFMT:-"\D{$CYAN%Y-%m-%d $MAGENTA%a} $NO_COLOR\t"}

바로 확인해 보려면...
$ . .prompt
해주면 바뀐 프롬프트를 확인할 수 있을 것이다.

추가로 쉘에 로그인 시 자동으로 예쁜 프롬프트를 보고 싶다면.. .bashrc의 마지막 부분에 아래의 내용을 추가해면 된다.
$ vi .bashrc
...
if [ -f $HOME/.prompt ]; then
       . $HOME/.prompt
fi

그냥 보고만 있어도 흐뭇하다 ㅋㅋㅋ

추가로 쉘 프롬프트에 관련된 내용은 http://www.haansoftlinux.com/magazine/magazineView.php?no=1006&page=0&catalog=1 에서 참고할 수 있다.


'Linux > Tip' 카테고리의 다른 글

우분투 / 데비안 계열 고정 ip 설정  (4) 2010.01.06
diff and patch in linux  (0) 2009.12.12
vi 문자열 치환  (2) 2009.08.31
Ubuntu 한국 업데이트(kr.archive.ubuntu.com) 미러 접속문제..  (1) 2009.08.25
리눅스 IP 설정  (0) 2008.04.24