source랑 ./실행의 차이?
 

source랑 ./실행은 둘 다 스크립트를 실행하는 방식이지만,
"어떻게 실행하느냐", "어디에서 실행되느냐" 가 완전히 달라!

 

✅ 핵심 차이 요약

항목 source script.sh ./script.sh
실행 방식 현재 셸 안에서 실행 새 셸을 열어서 실행
환경변수 적용 적용됨 (현재 셸에 유지됨) 새 셸에서만 적용됨 (끝나면 사라짐)
실행 권한 필요 ❌ 없음 ✅ 필요 (chmod +x)
주로 사용 용도 환경설정, export, alias 등 일반적인 스크립트 실행

 

 

 

 

🔍 예제로 완전 쉽게 보기

📄 예: my_env.sh 파일 내용

 
#!/bin/bash
export MY_NAME="joo"

▶ 1. source my_env.sh 실행

 
source my_env.sh
 
echo $MY_NAME    # 출력: joo ← 현재 셸에 적용됨!
 
  • 이건 지금 내 터미널에 진짜로 MY_NAME이 설정됨

▶ 2. ./my_env.sh 실행

 
./my_env.sh
 
echo$MY_NAME# 출력: (아무것도 안 나옴) ❌
  • 왜? → 스크립트는 "새 셸"에서 실행되고 끝나버림
  • 설정된 MY_NAME은 그 셸 안에서만 잠깐 살아 있다가 종료

⚠️ 실행 권한 차이

  • source는 그냥 읽어서 실행하니까 실행 권한 필요 없음
  • ./스크립트.sh는 직접 실행이라 권한 필요함
 
chmod +x script.sh # 실행 가능하게 만들기

🎯 언제 어떤 걸 써야 할까?

 

경로 설정, 환경변수 적용 source
일반적인 프로그램 실행 ./script.sh
.bashrc, toolchain 세팅 등 source
빌드, 컴파일, 실행 스크립트 ./build.sh

 

 

💬 정리 한 줄 요약

source는 "현재 셸에 영향 주기",
./실행은 "새 셸에서 따로 실행하기"

 

 

필요하면 두 가지를 직접 실습해볼 수 있는 간단한 예제도 같이 짜줄게!
실제로 써보면 바로 감 잡혀 😊

 

 


그럼 지금부터 source와 ./실행의 차이를 직접 체험할 수 있는
💻 초간단 실습 예제를 만들어볼게!

 

✅ 1. 파일 만들기

아래처럼 두 개 파일을 만들어줄 거야:

📄 파일 1: env_test.sh

touch 나 nano로 파일을 만들어주자.
nano env_test.sh
 
 
내용은 아래와 같이 편집해.
#!/bin/bash
export MY_NAME="joo"
echo "[env_test.sh] MY_NAME 설정 완료!"

 

 

📄 파일 2: check_name.sh

 
#!/bin/bash
echo"[check_name.sh] MY_NAME = $MY_NAME"

 

 

✅ 2. 실습 시작

▶ 실습 A: ./env_test.sh로 실행 (새 셸에서 실행)

 
./env_test.sh
./check_name.sh

출력 결과:
[env_test.sh] MY_NAME 설정 완료!
[check_name.sh] MY_NAME =

 

❗ MY_NAME이 비어 있음
왜냐하면 ./env_test.sh는 새 셸에서 실행돼서 환경 설정이 사라짐


▶ 실습 B: source env_test.sh로 실행 (현재 셸에 적용)

 
source env_test.sh
./check_name.sh

출력 결과:
[env_test.sh] MY_NAME 설정 완료!
[check_name.sh] MY_NAME = joo

 

✅ 이번엔 설정이 반영됨!
source는 현재 셸에 환경 변수 적용했기 때문에 그대로 유지됨

 

 

🎯 결과 요약


실행 방식 환경 적용됨 설명
./env_test.sh ❌ 아니요 새 셸에서 실행 → 끝나면 날아감
source env_test.sh ✅ 네 내 터미널 셸에 그대로 적용됨

+ Recent posts