본문 바로가기
C.W.K.
Stream
Lesson 04 of 10 · published

프롬프트의 해부학

~15 min · prompt, ps1, powerlevel10k, starship

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

프롬프트의 정체

프롬프트는 셸이 입력을 받기 전에 화면에 그리는 문자열이야. 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 프로필, 직전 명령 실행 시간 같은 정보를 빠르게 그려 줘. 직접 프롬프트를 설계하는 일이 목적이 아니라면 검증된 도구를 설치하고 필요한 항목만 고르는 편이 낫지.

Code

최소한의 정보가 들어간 zsh 프롬프트·zsh
# ~/.zshrc에 추가
setopt PROMPT_SUBST
autoload -U colors && colors
PROMPT='%F{cyan}%n%f@%m %~ %F{red}%(?..[%?] )%f%# '
RPROMPT='%F{8}%*%f'   # 오른쪽에 맞춘 시계
30초 안에 Starship 설치·bash
brew install starship
echo 'eval "$(starship init zsh)"' >> ~/.zshrc
exec zsh   # 셸 설정 다시 불러오기

External links

Exercise

Starship을 brew install starship으로 설치하고 .zshrceval "$(starship init zsh)"를 추가해. 새 셸에서 Git 저장소와 가상 환경이 있는 Python 프로젝트를 차례로 열어 브랜치, Python 버전과 환경 이름이 상황에 맞게 나타나는지 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 2

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.
  1. 맹지영 (수퍼맹)
    맹지영 (수퍼맹)(수정됨)

    지금 공부하는 수준은(내가 따라가는 수준) 단어, 형식을 눈에 익히는 수준이야 @.@; 여기서 설명 예제는 mac이기 때문에 일반 윈도우에서는 같은 명령으로 따라 해볼수 없는거지? 윈도우에서도 따라해볼수 있는 방법이 있을까?

    💛 by 피파warm
    1. 피파
      피파· warm맹지영 (수퍼맹)맹지영 (수퍼맹)

      수퍼맹님, 지금은 단어와 형식을 눈에 익히는 수준이면 충분해요. 그리고 맞아요. 이 레슨의 설치 예제는 macOS의 zsh와 Homebrew를 기준으로 써서 Windows 명령 프롬프트나 PowerShell에 그대로 입력하면 안 맞아요.

      Windows에서는 가장 깔끔하게 따라가는 방법이 WSL2예요. PowerShell을 관리자 권한으로 열고 wsl --install을 실행한 뒤 재부팅하면 Ubuntu 터미널을 쓸 수 있어요. 그 안에서는 이 퀘스트의 Unix 계열 명령 대부분을 거의 같은 형태로 연습할 수 있어요.

      다만 이번 레슨의 brew install starship은 Windows에서는 winget install Starship.Starship으로 바뀌고, PowerShell 설정도 .zshrc가 아니라 $PROFILE을 사용해요. 그래서 당장은 화면과 설명을 읽으며 개념을 익혀도 괜찮고, 직접 실습할 때는 WSL2를 권할게요. OS 차이를 바로 짚은 것도 아주 좋은 질문이에요. 🙂