반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- newSQL
- UNIX Internals
- go
- getopts
- SQLite
- 전처리기
- DBMS
- 구조와 원리
- 포인터변수
- 포인터
- TiDB
- Windows via c/c++
- bash
- Preprocessor
- kernel
- UNIX
- FreeBSD
- Programming
- OS 커널
- DBMS 개발
- Golang
- 컴퓨터 강좌
- Symbol
- 약어
- 한빛미디어
- Pointer
- 긴옵션
- 함수포인터
- 커널
- TiKV
Archives
- Today
- Total
sonumb
zsh 프롬프트 변경하기 본문
참조: zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html
1. 프롬프트를 변경해서, 알면 좋은 것? 혹은 원하는 기능?
아이맥이나 맥북 기준으로, 아래와 같다.
- iterm2를 이용할 때, LANG이 UTF인 터미널이랑 C 인 터미널이 구분되었으면 좋겠다.
- IP 나왔으면 좋겠다..
- 날짜도..
- git 브랜치 이름이 나왔으면..
- 현재 경로도 나왔으면...
2. ~/.zshrc 수정
1. 일단 언어에 따른 터미널 구별이 되도록 프로파일 이름을 명명한다.
그리고 이 이름은 ITERM_PROFILE 변수를 이용해서 얻어올 수 있다.
2. ip는 프롬프트 포맷 specifier가 없으므로, ifconfig 명령어로 획득하면 될 듯하다.
3. 날짜는 프롬프트 포맷 지시자가 있으나, 요일이 나오지 않는다. 이것도 date 명령으로 실행하면 된다.
4. git branch 출력은 git branch
혹은 git symbolic-ref
명령어를 이용하면 됨. git branch
명령어를 통한 현재 브랜치 이름 출력은 보단 symbolic-ref
를 추천한다. (브랜치 개수가 많아지면, symbolc-ref
명령어가 유리함)
또한, 문자열 치환은 필수적인데, awk
로 하면 느려지므로 쉘변수 치환 구문을 이용하는게 좋다.
→ git rev-parse --abbrev-ref HEAD
명령어로 한방에 해결.
5. 현재 경로는 위의 zsh 문서 링크를 참조하자. (색깔 입히기는 덤으로)
위와 같은 사실들을 확인했고, 아래 내용을 ~/.zshrc 파일에 추가해주었다.
# get_ip 는 현재 자신의 ip 주소를 획득하는 함수다. 단 무선과 유선을 동시에 쓴다면 유선의 주소를 반환한다.
# 단 mac 전용이다
get_ip()
{
MAIN_IP=""
for i in `seq 4 8`;
do
_status=`ifconfig en${i} 2>&1 | grep -w status | cut -d' ' -f2` # status
if [[ $_status == "active" ]]; then
MAIN_IP=`ifconfig en${i} | grep -w inet | cut -d' ' -f2` # wired internet
if [[ ! -z "$MAIN_IP" ]]; then
break
fi
fi
done;
if [[ -z "$MAIN_IP" ]]; then
MAIN_IP=`ifconfig en0 | grep -w inet | cut -d' ' -f2` # wireless internet
fi
echo ${MAIN_IP}
}
# git 브랜치 이름 획득하는 함수
parse_git_branch() {
# ver 1:
# git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
# ver 2: awk가 실행이 느리므로 버벅인다.
# git symbolic-ref HEAD 2> /dev/null | awk 'BEGIN{FS="/"} {print $NF}'
# ver 3: ver1이랑 속도가 비슷하나 이게 조금 빠르다. sed 때문인 듯
# branch_name=$(git symbolic-ref HEAD 2> /dev/null)
# echo ${branch_name##*/}
# ver 4: 문자열 치환이 필요없다.
git rev-parse --abbrev-ref HEAD
}
setopt prompt_subst #이 명령어를 수행해야, 아래의 홑따옴표로 이뤄진 문자열 프롬프트를 실행할 수 있다.
export PROMPT='
[$ITERM_PROFILE] %F{green}`date +"[%Y-%m-%d (%a)][%H:%M:%S]"`%f $USER@%F{cyan}`get_ip`%f %F{magenta}[$tb_display_name: $(parse_git_branch)]%f
%F{yellow}%~%f
%F{green}%#%f '
3. 결과물
LANG이 C 인 터미널
LANG이 UTF-8인 터미널
반응형