13. Customizing the prompt
가장 기본적인 prompt는 다음처럼 생겼다.
[ec2-user@ip-xxx.xx.xx.xx ~]$
prompt는 전에 살펴봤던 것처럼 PS1
이라는 환경변수로 정의되어 있다. (Prompt String 1의 줄임말)
[ec2-user@ip-xxx.xx.xx.xx ~]$ echo $PS1
[\u@\h \W]\$
이 backslashed-escaped special character들은 bash가 prompt string에서 특별하게 사용한다.
- \a: ASCII bell. computer beep 소리를 낸다 (?)
- \d: current date (Mon May 26)
- \h: hostname
- \H: full hostname
- \j: 현재 shell 세션에서 실행중인 job 개수
- \l: 현재 터미널 기기의 이름
- \n: newline (줄바꿈)
- \r: carrage return
- \s: shell 프로그램 이름
- \t: 현재 시간 (24시간 기준) HH:mm:ss 포멧
- \T: 12시간 기준 현재시간
- @: 21시간 기준 + AM/PM 포멧
- \A: 24시간 기준 현재시간 HH:mm 포멧
- \u: 현재 유저명
- \v: shell 버전명
- \w: 현재 working directory
- \W: 현재 working directory의 마지막 경로
- !: 현재 명령어의 히스토리 넘버
- #: 현재 쉘 세션에서 입력되었던 명령어 수
\$
:$
캐릭터를 표시. superuser 권한일 떄에는 #- [: non-printing 캐릭터를 나타내는 시그널 시작
- ]: non-printing 캐릭터를 나타내는 시그널 시작
Prompt 디자인 변경해보기
[ec2-user@ip-xxx.xx.xx.xx ~]$ ps1_old="$PS1"
[ec2-user@ip-xxx.xx.xx.xx ~]$ echo $ps1_old
[\u@\h \W]\$
# 나중이 이렇게 복구할 수 있다.
[ec2-user@ip-172-31-5-10 ~]$ PS1="$ps1_old"
일단 모두 제거해보자.
[ec2-user@ip-172-31-5-10 ~]$ PS1=
아무것도 표시되지 않는 것을 볼 수 있다. 이제 달러 사인($)만 줘보자.
[ec2-user@ip-172-31-5-10 ~]$ PS1="\$ "
$
이제 적어도 어디에 있는지 정도는 볼 수 있다.
시간과 hostname을 표시해보자.
$ PS1="\A \h \$ "
15:25 ip-xxx-xx-xx-xx $
기존 방식과 거의 흡사하게 만들어보자.
15:26 ip-172-31-5-10 $ PS1="<\u@\h \W>\$ "
<ec2-user@ip-172-31-5-10 ~>$ ls
색깔 변경
캐릭터 색깔은 ANSI escape code로 터미널 에뮬레이터에 보내진다.
# red prompt
<ec2-user@ip-172-31-5-10 ~>$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
# 기존 색상으로 돌아가라는 신호
<ec2-user@ip-172-31-5-10 ~>$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
# red background color
<ec2-user@ip-172-31-5-10 ~>$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "
ANSI 는 \033[X;XXm
형태로 이루어진다.
세미콜론으로 나누어진 첫번째 숫자는 특별한 뜻을 갖고, 숫자는 30부터 시작된다.
0이 기본, 1은 bold, 4는 italic, 5는 밑줄 등이다.
각 숫자 번호는 ANSI escape code 위키피디아에서도 볼 수 있다.
0;30 은 기본 블랙 ->
\033[0;30m
이 그래서 검정색이다.\033[0;30m
: black\033[0;31m
: red\033[0;32m
: green
백그라운드 컬러는 40으로 시작한다.
\033[0;40m
: black\033[0;41m
: red\033[0;42m
: green
커서 이동
escape code로 커서의 위치도 조정할 수 있다. 보통 시계나 특별한 정보를 스크린의 위치에 고정할 때 쓰인다.
구체적인 sequence는 따로 정리하지 않겠다.
다음은 스크린의 맨 위에 빨간 시계를 고정시키는 prompt.
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ "
이걸 활용하면 zsh를 조금 더 깔끔하게 만들 수 있을듯.
한번 더 보고 실제로 많은 정보를 표시해주는 shell을 만들어보자.
prompt 저장
.bashrc
파일에 두줄을 추가하면 된다.
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ "
export PS1
'backend' 카테고리의 다른 글
리눅스 파일 검색: locate, find 기본 사용법, 이것만 알면 쉽다 (0) | 2020.12.20 |
---|---|
Linux Package management: 리눅스의 패키지란? (0) | 2020.12.19 |
Linux environment: 환경변수 (0) | 2020.12.17 |
리눅스 권한 (Linux permission) 정리: chown, chmod (0) | 2020.12.15 |
쉘 익스펜션(Shell expansion): wildecard (*), tilde (~), dot (.) (0) | 2020.12.14 |