1 minute read

.zshrc 와 .profile 구분하기

처음 로그인 할때 사용하는 쉘(Login shell)과 달리 새로운 탭으로 생성하는 쉘은 비로그인 쉘(Non-login shell)입니다.

여기엔 .profile이 반영되지 않습니다. 그래서 .zshrc에 환경변수를 작성했는데 이는 권장하지 않는 방법입니다.

.zshrc(.bashrc)는 쉘에 영향을 주는 것들 (alias, script, etc…), .profile 에는 영향을 주지 못하는 환경변수 등을 저장하는 목적으로 사용한다고 합니다.

출처: https://superuser.com/questions/789448/choosing-between-bashrc-profile-bash-profile-etc

그래서 저는 1) .profile 에 CDPATH 옵션을 추가하고 2) .zshrc 에서 .profile을 확인하여 반영하는 코드를 추가해주겠습니다.

1) .profile에 CDPATH 추가

export CDPATH=$HOME:$HOME/workbench:..:$CDPATH

제가 추가한 경로는 세가지 입니다.

  • $HOME: 홈 디렉터리
  • $HOME/workbench : 주로 작업물이 저장되는 디렉터리
  • ../ : 추후 설명할 편리함을 위한 디렉터리

2) .zshrc 에서 .profile을 반영하는 코드 추가

# apply .profile
if [ -f ~/.profile ]; then
    . ~/.profile;
fi

자유롭게 이동해보기

image-20241218225846288

CDPATH값이 설정되어 ~ 경로에서 ~/workbench/airflow로 이동할 수 있었습니다.

동시에 ~/workbench/airflow/logs 에서 ~/workbench/airflow/dags 로 이동할 수 있었죠.

이는 CDPATH 에 ~/workbench 경로와 ../ 경로가 포함되었기 때문입니다.

동시에 ~ 경로도 포함해줬기 때문에 ~/c4fiber.github.io 디렉터리로도 이동할 수 있었네요.

Q. 혹시 디렉터리 경로가 겹치면 어떻게 하나? 안겹치게 해야하는 것 아니냐?

A. 시간낭비 같습니다. 문제가 생기면 바꾸겠습니다. 디렉토리를 전혀 겹치지 않게 하는것도 어려울 뿐더러 들인 시간과 노력에 비해 얻을것이 너무 없어보여서 입니다.

겹치는 경로를 확인하고 싶다면

.zshrc 내부에는 이러한 함수도 작성해두었습니다.

check_cdpath() { ls -d */ && (ls -d */*/ | cut -d/ -f2-) | sort | uniq -c | sort -nr | less }

이 명령어는 현재 디렉터리 기준 두단계 안의 하위 디렉터리 중 중복된 디렉터리를 확인하기 위한 명령어 입니다.

image-20241218232909845

저는 다음과 같이 untitled, pintos 라는 경로가 겹친다고 나옵니다.

하지만 당분간 두가지 디렉터리에 접근할 이유가 없으니 놔두겠습니다.

Categories:

Updated: