셸 프롬프트(PS1) 생성기
bash·zsh 프롬프트를 조립해 한 줄로 복사
원하는 조각(사용자 이름, 호스트, 현재 디렉토리, git 브랜치, 직전 명령의 종료 코드, 파이썬 가상환경)을 켜고 색을 고르면 프롬프트가 그 자리에서 그려집니다. 결과는 ~/.bashrc 나 ~/.zshrc 에 그대로 붙여넣을 수 있는 한 덩이입니다. 색 코드는 비출력 구간으로 감싸서 긴 명령줄이 엉뚱한 곳에서 줄바꿈되지 않고, git 브랜치는 저장소 밖에서 사라지며, 종료 코드는 프롬프트가 덮어쓰기 전에 잡아 둡니다. 전부 브라우저 안에서 처리하고 로그인도 필요 없습니다.
프리셋
미리보기
dev@mbp:~/code/bootsignal (main) $ npm run dev
조각
스타일
프롬프트 기호
완성된 프롬프트
# BootSignal prompt, add this to ~/.bashrc
bs_git_branch() {
local b=$(git branch --show-current 2>/dev/null)
[ -n "$b" ] && printf ' (%s)' "$b"
}
PS1='\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\[\e[1;35m\]$(bs_git_branch)\[\e[0m\] \[\e[1m\]\$\[\e[0m\] '전부 브라우저 안에서 조립하며 아무것도 업로드하지 않습니다. 먼저 셸에 그대로 붙여넣어 확인해 보고, 마음에 들면 설정 파일에 추가하세요.
자주 묻는 것
- 어디에 넣나요?
- bash 는 ~/.bashrc, zsh 는 ~/.zshrc 끝에 붙인 뒤 source ~/.bashrc 를 실행하거나 새 터미널을 엽니다. macOS 의 bash 는 ~/.bash_profile 을 읽는 경우가 많습니다.
- 색 코드를 왜 \[ \] 로 감싸나요?
- bash 는 커서 위치를 계산할 때 PS1 의 모든 글자를 셉니다. 색 코드는 화면에 아무것도 찍지 않으므로 비출력 구간으로 표시해야 합니다. 표시하지 않으면 긴 명령줄이 엉뚱한 위치에서 줄바꿈되며 프롬프트를 덮어씁니다. zsh 는 %F·%f 를 쓰고 이미 폭 0 으로 취급합니다.
- git 브랜치는 왜 함수인가요?
- PS1 자체로는 조건 분기를 할 수 없어서, 저장소 밖에서는 헬퍼가 아무것도 출력하지 않게 했습니다. 그래야 빈 괄호나 떠도는 구분자가 남지 않습니다. 브랜치 조각 옆에 구분자를 두지 않는 것도 같은 이유입니다.
- 종료 코드에 왜 PROMPT_COMMAND 가 필요한가요?
- bash 에서는 프롬프트 안의 명령 치환이 먼저 실행되므로, 그대로 $? 를 읽으면 그 치환의 결과가 보입니다. PROMPT_COMMAND 에서 한 번 잡아 두면 진짜 종료 코드가 남습니다. zsh 는 %(?..) 조건 이스케이프가 있어 훅이 필요 없습니다.