export PATH=...를 했는데 터미널을 새로 열면 사라져서 당황한 적 있나요? 환경변수가 헷갈리는 이유는 딱 두 가지입니다. 자식 프로세스로 전달되느냐, 그리고 어느 파일에 적어야 살아남느냐. 이 둘만 잡으면 끝입니다.
쉘 변수 vs 환경변수
변수에는 두 종류가 있습니다. 그냥 변수는 현재 쉘 안에서만 살고, export한 변수는 그 쉘이 실행하는 자식 프로세스에까지 전달됩니다.
| 구분 | 쉘 변수 | 환경변수 |
|---|---|---|
| 만드는 법 | NAME=값 | export NAME=값 |
| 적용 범위 | 현재 쉘만 | 현재 쉘 + 자식 프로세스 |
| 확인 | set | env / printenv |
| 대표 예 | 임시 작업 변수 | PATH, HOME, LANG |
export 없이 만든 변수는 python app.py 같은 자식 프로세스가 못 봅니다. 프로그램에 설정을 넘기려면 반드시 export가 필요합니다.
로컬 터미널
GREETING=hi # 쉘 변수
export GREETING # 환경변수로 승격
echo $GREETING # hi
어느 파일에 적어야 하나
export는 그 세션이 끝나면 사라집니다. 영구히 남기려면 시작 파일에 적어야 하는데, 파일마다 읽히는 시점이 다릅니다.
| 파일 | 읽히는 시점 | 용도 |
|---|---|---|
~/.bashrc | 대화형 쉘 열 때마다 | 별칭·함수·일상 변수 |
~/.profile | 로그인 시 1회 | 세션 전역 환경변수 |
~/.bash_profile | bash 로그인 시 | 로그인 쉘 설정 |
/etc/environment | 시스템 전체 | 모든 사용자 공통 |
GUI 앱까지 영향을 주려면 보통 ~/.profile이나 /etc/environment에 둡니다. 터미널 별칭처럼 매번 필요한 건 ~/.bashrc가 맞습니다.
적용과 확인
파일을 고친 뒤에는 새 터미널을 열거나 source로 즉시 반영합니다.
로컬 터미널
echo 'export EDITOR=vim' >> ~/.bashrc
source ~/.bashrc # 지금 쉘에 즉시 반영
OUTPUT
$ printenv EDITOR
vim
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin
PATH에 경로를 추가할 때는 기존 값을 보존하는 게 중요합니다. export PATH="$HOME/bin:$PATH"처럼 $PATH를 다시 포함해야 기존 명령들이 안 깨집니다. 변수를 지울 때는 unset NAME을 씁니다.
요점 정리
NAME=값은 현재 쉘만,export NAME=값은 자식 프로세스까지 전달됩니다.- 영구 설정은 시작 파일에. 일상 별칭은
~/.bashrc, 세션 환경변수는~/.profile. - 수정 후
source ~/.bashrc로 즉시 반영, 확인은printenv/env. PATH수정 시$PATH를 꼭 다시 포함해 기존 경로를 보존하세요.
환경변수와 쉘 설정 파일을 직접 만지며 익히는 실습은 리눅스 트랙에서 회원가입 없이 무료로 익힐 수 있습니다.