이번 포스트에서는 mac의 기본적인 shell 명령어에 대해 살펴보자.
기본적인 Shell 명령어
나는 누구?
> whoami
itsmeyjc
현재 내가 사용하고 있는 툴은 어디의 것이지?
> which brew
/opt/homebrew/bin/brew
echo, eval, >>(redirection 연산자), 치환자 $(..)
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/<홈>/.zprofile
- >> : redirection 연산자로 출력의 방향을 변경하는데 사용된다. > 는 덮어쓰기, >>는 뒤에 추가하기이다.
- echo : echo는 기본적으로 '. . .' 안의 내용을 터미널에 출력하는 명령이다. 위의 예에서는 >> 와 같이 사용되었기 때문에 출력의 방향은 터미널이 아닌 .zprofile 파일이 대상이 된다.
- eval: javascript의 eval 함수처럼 ". . ." 내용을 실행한다.
- $(명령어 실행): $(...)는 명령어 치환자로 괄호 안의 명령어를 먼저 실행하고 그 명령어의 표준 출력을 문자열로 받아서 대체한다.
결국 위 문장은 다음의 절차로 진행된다.
- eval에 의해 /opt/homebrew/bin/brew shellenv를 실행하고 그 결과를 문자열로 $(...)내부에 가져온다.
- echo에 의해 문자열 내용을 /Users/<홈>/.profile에 추가한다.
여러 설정 파일들?
기본적으로 .으로 시작하는 파일들은 숨김 파일이다.
.zprofile
mac의 기본 shell인 zsh 쉘의 설정 파일이다. 즉 맥 터미널을 켤 때마다 필요한 내용이 있다면 .zprofile에 설정해두면 된다.
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/<홈>/.zprofile
위의 코드는 brew의 shellenv 내용을 .zprofile에 설정해서 zsh가 실행될 때마다 brew의 설정 내용을 그대로 사용하기 위함이다. 이를 통해 brew를 통해 설치한 애플리케이션들을 zsh에서 바로 사용할 수 있게 된다.
.zprofile은 로그인 쉘로 주로 애뮬레이터를 처음 열었을 때 한 번만 실행된다.
.zshrc
.zshrc는 대화형 쉘로 터미널을 여는 경우는 물론 이미 실행중인 터미널에서 zsh 명령어를 입력하여 새로운 쉘 세션을 시작할 때 처럼 사용자가 직접 명령어를 입력하고 상호 작용할 수 있는 쉘이다.
특징 |
.zprofile |
.zshrc |
실행 시점 |
로그인 셸 시작 시 (한 번) |
대화형 셸 시작 시 (새 터미널/탭 열 때마다)
|
주요 용도 |
환경 변수 (PATH, EDITOR), 전역 설정 |
별칭, 함수, 프롬프트, 셸 동작 사용자 정의
|
영향 범위 |
로그인 세션 전체 (상속됨) |
|
일반적으로는 환경 변수는 .zprofile에, 쉘의 외관이나 특정 명령의 단축키 등은 .zshrc에 두는 것이 권장된다. 이렇게 문지함으로써 불필요한 설정 로드를 줄여 쉘 시작 속도를 최적화할 수 있다.