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 | ✅ 네 | 내 터미널 셸에 그대로 적용됨 |
'잡동사니 > GPT가 알려주는' 카테고리의 다른 글
[GPT가 알려주는] ELF란? (0) | 2025.04.04 |
---|---|
[GPT가 알려주는] #와 $의 차이 (0) | 2025.04.04 |
[GPT가 알려주는 C] char[]와 char* (0) | 2025.04.04 |
[GPT가 알려주는] GIT 상황극 (0) | 2025.04.04 |
[GPT가 알려주는] GIT (0) | 2025.04.04 |