프롬프트의 정체
프롬프트는 셸이 입력을 받기 전에 화면에 그리는 문자열이야. bash는 $PS1, zsh는 $PROMPT 또는 $PS1에 그 값을 두고 매번 다시 평가해. 색과 상태 정보가 화려해 보여도 바탕은 일반 텍스트와 이스케이프 코드의 조합이야. 플러그인을 쓰기 전에 이 층을 알면 프롬프트가 망가졌을 때 어디부터 볼지 선명해져.
자주 만나는 이스케이프 코드
- zsh의
%n과 bash의\u는 사용자 이름을 표시해. - zsh의
%m과 bash의\h는 짧은 호스트 이름을 표시해. - zsh의
%~와 bash의\w는 현재 디렉터리를 표시하며 홈은~로 줄여. - zsh의
%?와 bash의$?는 직전 명령의 종료 상태를 표시해. - zsh의
%F{red}와 bash의\[\033[31m\]는 빨간색 출력을 시작해. - zsh의
%f와 bash의\[\033[0m\]는 색상을 원래대로 돌려.
예를 들어 PROMPT='%F{cyan}%n%f@%m %~ %F{red}%(?..%?)%f%# '는 사용자 이름을 청록색으로 표시하고, 이어서 호스트와 작업 디렉터리를 보여 줘. 직전 종료 상태가 0이 아닐 때만 그 값을 빨간색으로 붙인 뒤 마지막 프롬프트 문자를 그려.
두 줄 프롬프트와 오른쪽 프롬프트
프롬프트를 두 줄로 나누면 실제 명령 입력을 언제나 화면 왼쪽에서 시작할 수 있어. PROMPT 끝에 $'\n'을 넣고 마지막 줄에는 짧은 기호만 두면 돼. zsh의 RPROMPT는 같은 줄 오른쪽에 정보를 배치하므로 Git 브랜치 같은 상태를 보여 주면서도 입력 영역을 밀어내지 않아.
프롬프트 도구를 빌려 써도 돼
이스케이프 코드를 모두 외울 필요는 없어. zsh 전용 Powerlevel10k와 여러 셸에서 쓰는 Starship은 Git 상태, Python 가상 환경, Node 버전, Kubernetes 맥락, AWS 프로필, 직전 명령 실행 시간 같은 정보를 빠르게 그려 줘. 직접 프롬프트를 설계하는 일이 목적이 아니라면 검증된 도구를 설치하고 필요한 항목만 고르는 편이 낫지.
지금 공부하는 수준은(내가 따라가는 수준) 단어, 형식을 눈에 익히는 수준이야 @.@; 여기서 설명 예제는 mac이기 때문에 일반 윈도우에서는 같은 명령으로 따라 해볼수 없는거지? 윈도우에서도 따라해볼수 있는 방법이 있을까?