zsh 환경을 위한 zshrc 설정
zsh 설정을 할때마다 헷갈려서 정리해본다. 원래 zshrc에 때려 넣곤 했는데 AI 사용하는 대화형 쉘이나 스크립트에서는 설정이 로드가 되지 않는 일이 종종 있었다. 알아보다보니 zshenv, zshrc 등에 적절히 넣어야하는 것을 알았다.
zsh 로드순서
| 순서 | 파일 | 로그인쉘 (zsh) |
비로그인 대화형 쉘 (zsh -l) |
비대화형 스크립트 (zsh script.sh) |
| 1 | /etc/zshenv | ✅ | ✅ | ✅ |
| 2 | ~/.zshenv | ✅ | ✅ | ✅ |
| 3 | /etc/zprofile | ✅ | ❌ | ❌ |
| 4 | ~/.zprofile | ✅ | ❌ | ❌ |
| 5 | /etc/zshrc | ✅ | ✅ | ❌ |
| 6 | ~/.zshrc | ✅ | ✅ | ❌ |
| 7 | ~/.zlogin (로그아웃시: ~/.zlogout) |
✅ | ❌ | ❌ |
이런 순서로 로드가 되고 있기 때문에 다음의 기준으로 설정을 배치해야한다.
- zshenv: 최소한의 필수 환경변수 (PATH 등)
- zprofile: 로그인 쉘 초기화 (brew shellenv 등)
- zshrc: 프롬프트, alias, 자동완성 등
- zlogin: 로그인 환영 메시지
.zshenv
# ==========================================
# 📂 zsh 모듈형 설정 로더 (.zshenv)
# ==========================================
if [ -d "$HOME/.zsh" ]; then
for config_file in "$HOME/.zsh"/env_*.zsh; do
[ -r "$config_file" ] && source "$config_file"
done
unset config_file
fi
env에는 PATH, JAVA_HOME 등의 환경변수, secret에는 각 cli에서 사용할 token을 두었다.
.zprofile
# ==========================================
# 📂 zsh 모듈형 설정 로더 (.zprofile)
# ==========================================
if [ -d "$HOME/.zsh" ]; then
for config_file in "$HOME/.zsh"/profile_*.zsh; do
[ -r "$config_file" ] && source "$config_file"
done
unset config_file
fi
macos는 /etc/zprofile에서 path_helper 같은 것이 /usr/bin 같은 것을 PATH 최상위로 변경하고 있음을 알았다. 이렇게 하면 아무리 brew로 뭔가를 설치해도 사용할 수가 없다. 그래서 여기서 brew 같은 앱의 path를 최상위로 설정한다.
.zshrc
# ==========================================
# 📂 zsh 모듈형 설정 로더 (.zshrc)
# ==========================================
if [ -d "$HOME/.zsh" ]; then
for config_file in "$HOME/.zsh"/zsh_*.zsh; do
[ -r "$config_file" ] && source "$config_file"
done
unset config_file
fi
여기에는 alias, prompt, nvm 같은 필요한 것들을 모두 넣는다.
이제는 헷갈리지 않고 설정 잘 할 수 있게 되기를...
반응형