리눅스/리눅스 응용

셔뱅(Shebang, #!) 이란?

Linuxpia 2025. 8. 13. 01:51
반응형

셔뱅(Shebang, #!) 이란?

셸 스크립트의 첫 줄에 작성되는

#!/bin/bash

같은 구문을 **셔뱅(Shebang)**이라고 합니다.
이는 스크립트 실행 시 **어떤 프로그램(해석기, Interpreter)**로 이 파일을 해석할지를 지정하는 역할을 합니다.


1. 셔뱅의 동작 원리

  1. 사용자가 스크립트를 실행 (./script.sh)
  2. 운영체제는 파일 첫 두 글자(#!)를 확인
  3. 그 뒤에 지정된 경로의 프로그램을 실행하여, 해당 프로그램이 스크립트 내용을 처리
  4. 예:→ /bin/bash script.sh 명령과 동일하게 동작
  5. #!/bin/bash echo "Hello"

2. 셔뱅이 중요한 이유

  • 환경에 따라 기본 셸이 다르기 때문
    • 어떤 시스템은 /bin/sh가 기본, 또 어떤 시스템은 /bin/bash 또는 /usr/bin/zsh일 수 있음.
    • 명령어 문법이 셸마다 다를 수 있으므로, 실행 환경을 명확히 지정해야 함.
  • 스크립트의 이식성(Portability) 확보
    • 개발 환경과 운영 환경이 달라도 동일한 해석기를 사용하여 실행 가능.
  • 오류 방지
    • Bash 문법을 썼는데 /bin/sh로 실행되는 경우, 일부 문법이 동작하지 않아 에러 발생 가능.

3. 주요 셔뱅 예시

셸 종류 셔뱅 예시 설명
Bash #!/bin/bash 가장 널리 사용되는 GNU Bourne Again Shell
POSIX sh #!/bin/sh 최소한의 POSIX 호환 셸
Zsh #!/bin/zsh 강력한 자동완성·테마 지원
Ksh #!/bin/ksh Korn Shell
Python #!/usr/bin/env python3 파이썬 스크립트 실행 시
Perl #!/usr/bin/perl Perl 스크립트 실행 시

4. /usr/bin/env를 이용한 셔뱅

  • 특정 경로가 아닌, 환경 변수 PATH에서 찾은 실행 파일을 사용.
  • 이 방식은 여러 환경에서 경로가 다를 때 유용.
  • 예:→ 시스템 PATH에서 bash를 찾아 실행.
  • #!/usr/bin/env bash

5. 셔뱅이 없는 경우

  • 파일을 직접 실행(./script.sh)하려고 하면 "Permission denied" 또는 "Command not found" 오류 가능.
  • 셔뱅 없이 실행하려면:처럼 명시적으로 해석기를 지정해야 함.
  • bash script.sh sh script.sh

정리

  • 셔뱅은 스크립트의 실행 해석기를 지정하는 매우 중요한 첫 줄.
  • /usr/bin/env 방식은 경로가 다른 환경에서도 호환성 높임.
  • 잘못된 셸 지정은 문법 오류나 실행 불가 문제를 유발할 수 있음.