본문으로 바로가기

예쁜 프롬프트

category 카테고리 없음 2018. 2. 11. 17:41

이번 포스트에서는 bash에서 사용할 만한 이쁜 프롬프트를 소개해드릴려고 합니다.

원글은 훌륭한녀석의끄적꺼림님 포스트 입니다.


zsh를 사용하시는 분들도 많으시지만 전 아직 bash가 더욱 좋습니다.

oh my zsh의 여러 테마들 보다는 못하지만 원하는 정보는 충분히 얻어지네요


우선 홈폴더에 .myprompt와 같은 식으로 원하는 파일명으로 아래의 소스코드를 붙여넣습니다.

## 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"}

출처: http://hulryung.tistory.com/26 [훌륭한녀석의 끄적거림]

# 예쁜 프롬프트  소스

## 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"}

## 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"}

출처: http://hulryung.tistory.com/26 [훌륭한녀석의 끄적거림]


파일을 저장하신 후 $. .myprompt 명령을 내려주시면 아래와 같이 예쁜 프롬프트가 출력됩니다.


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

출처: http://todayis.tistory.com/193 [Superstar's New World]


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


출처: http://todayis.tistory.com/193 [Superstar's New World]
추가로 쉘에 로그인 시 자동으로 예쁜 프롬프트를 보고 싶다면.. .bashrc의 마지막 부분에 아래의 내용을 추가해면 된다.
$ vi .bashrc
...
if [ -f $HOME/.prompt ]; then
       . $HOME/.prompt
fi


출처: http://todayis.tistory.com/193 [Superstar's New World]

터미널 창을 실행시킬때 마다 myprompt를 적용시키시려면 홈디렉토리의 .bashrc파일의 맨 마지막에 아래의 코드를 삽입 후 저장해 주세요

vi .bashrc

if [ -f $HOME/.prompt ]; then
       . $HOME/.prompt
fi

출처: http://todayis.tistory.com/193 [Superstar's New World]

# 홈 디렉토리에 .myprompt파일이 있으면 실행시킴

[[ -f ~/.myprompt ]] && . ~/.myprompt