[번외] bash로 실행 vs ./로 실행

1. 실행 방식의 차이

구분 bash script.sh ./script.sh
실행 권한 필요 없음 필수 (chmod +x)
인터프리터 지정 (#!) 무시 가능 반드시 필요
실행 방식 bash가 스크립트를 인자로 받아 실행 OS가 파일을 직접 실행 (실행 파일처럼 취급)
실행 환경 bash 셸에서 실행됨 #!에 명시된 셸에서 실행됨

2. 환경 설정 차이

  • bash script.sh
    • 현재 셸에서 새로운 bash 프로세스를 생성하여 실행
    • script.sh#! (shebang) 줄은 무시
    • 스크립트에 실행 권한이 없어도 실행 가능
  • ./script.sh
    • 스크립트 파일이 실행 권한을 가져야 함 (chmod +x script.sh)
    • #! 줄에 명시된 셸(#!/bin/bash, #!/usr/bin/env bash 등)을 사용해 독립적으로 실행
    • 시스템이 스크립트를 실행 가능한 프로그램으로 취급

3. 예제

script.sh 내용

#!/bin/bash
echo "Running script with PID $$"

실행 권한 부여

chmod +x script.sh

실행 방법

bash script.sh    # 실행 권한 필요 없음
./script.sh       # 실행 권한 필요, #! 해석됨

4. 주요 차이 요약

항목 bash script.sh ./script.sh
실행 권한 ❌ 필요 없음 ✅ 필요함
#! 해석 여부 ❌ 무시됨 ✅ 해석함
실행되는 셸 bash로 고정 #!에 따라 다름
호출 방식 셸 명령으로 실행 실행 파일처럼 실행