C.W.K.
Stream
Lesson 03 of 10 · published

macOS 가 왜 zsh 를 기본으로 삼았나

~15 min · zsh, macOS, default-shell, license

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

Apple 이 갈아탄 진짜 이유 — license

Bash 4.0 (2009) 은 GPLv3 로 출시됐어. Apple 변호사들이 GPLv3 를 안 좋아해 (특허 / anti-tivoization 조항을 OS 벤더 입장에서 위험하다고 봄). 그래서 macOS 의 bash 는 GPLv2 마지막 버전인 3.2 에서 십 년 넘게 멈춰 있었어. 2019 년에는 12 년 묵은 bash 였지. macOS Catalina 는 default login shell 을 zsh (MIT 풍 zsh license, 호의적) 로 옮겼고 그 뒤로 계속 최신을 유지하고 있어.

bash 3.2 대비 zsh 가 주는 것

  • 제대로 된 completion 엔진compinit + 커뮤니티가 만든 수천 개 completion 파일. git 옆에서 Tab 누르면 branch 보이고, kubectl 옆에서는 pod 가 보여.
  • 재귀 globbing**/*.py 한 번이면 현재 디렉터리 아래 모든 Python 파일. 흔한 케이스에 더 이상 find 안 써도 돼.
  • Glob qualifier*(.om[1]) = '이 디렉터리에서 가장 최근에 수정된 일반 파일'. 짧고 빨라.
  • Themed prompt — Powerlevel10k, Starship, Pure. git branch, Python venv, Kubernetes context 가 스크립팅 없이 프롬프트에 표시돼.
  • 플러그인 생태계 — Oh-My-Zsh, Prezto, zinit. auto-suggestion, syntax highlighting, history search 같은 거 한 줄 추가로 들어와.

bash 에서 그대로 가져온 것

인터랙티브 bash 습관 거의 다 그대로 통해 — $(...), [[ ]], $?, $0, here-doc, set -e, 배열. 차이는 딴 데서 나와: word splitting, glob 동작, read 플래그, array 인덱스 시작 (zsh 기본은 1 — scripting 트랙 에서 다룸).

script 는 zsh? bash?

네 노트북 안에서만 도는 스크립트는 zsh 도 OK. 서버, 컨테이너 이미지, CI runner, 다른 개발자 머신으로 보낼 스크립트는 bash 나 POSIX sh 로 — bash 는 모든 리눅스 배포판에 있지만 zsh 는 아닌 경우 많아. shebang 이 결정하고, 본문은 거기 맞춰야 해.

Code

재귀 glob — 모든 Python 파일 찾기·zsh
# Every .py file under the current tree
ls **/*.py
# Largest 5 .py files (zsh glob qualifiers)
ls -lh -- **/*.py(.OL[1,5])
git, kubectl, brew 의 Tab completion·zsh
# Make sure compinit is loaded once per session
autoload -Uz compinit && compinit
# Then this Tab completes branch names
git checkout <Tab>
# This Tab completes pods in your current k8s context
kubectl logs <Tab>

External links

Exercise

혹시 아직 bash 라면 chsh -s /bin/zsh 로 zsh 로 갈아타. .zshrcautoload -Uz compinit && compinit 추가. 터미널 재시작 후 git checkout 치고 Tab — branch 목록이 나와야 정상. 안 나오면 compinit -d 로 캐시 재생성.

Progress

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

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.