본문 바로가기
리눅스

[Linux] 리눅스 쉘 스크립트의 시작: SheBang(#!)

by ImirAin 2025. 10. 25.

SheBang(#!)은 리눅스 및 유닉스 계열 시스템에서 스크립트 파일의 맨 앞에 위치하여 해당 파일을 어떤 명령어 해석기(인터프리터)로 실행할지 시스템에 알려주는 특별한 기호입니다. 이는 단순한 주석이 아니라, 커널이 스크립트를 올바르게 처리하기 위한 2바이트의 매직 넘버 역할을 합니다


1. SheBang(#!)의 역할과 구문

1.1. 기본 역할

#! 바로 뒤에 나오는 경로는 해당 스크립트 파일의 명령어들을 해석하고 실행할 프로그램의 위치를 나타냅니다.

  • 가장 일반적인 사용: 셸 스크립트에서 가장 흔하게 사용되며, 나머지 명령어들을 주석을 제외하고 순서대로 실행하도록 시스템에 지시합니다.

1.2. 셔뱅 구문

#!<interpreter> [optional-arg]
  • <interpreter>에는 명령어 해석기 프로그램의 절대 경로가 입력되어야 합니다.
  • #! 뒤에 공백이 있어도 정상적으로 동작합니다.
  • 만약 경로가 정확하지 않거나 존재하지 않는다면, 시스템은 bad interpreter 오류를 발생시키며 스크립트 실행에 실패합니다.

1.3. 호환성을 위한 필수 요소

스크립트 파일에 #!/bin/bash와 같은 셔뱅을 필수적으로 넣어주면, 해당 스크립트가 어떤 언어(인터프리터)로 작성되었는지 명확해져 호환성을 높이고 오류 발생 가능성을 줄일 수 있습니다.


2. 환경 독립적인 SheBang 사용: #!/usr/bin/env

대부분의 셸 스크립트에서는 /bin/bash 또는 /usr/bin/env python처럼 절대 경로를 사용해야 합니다. 그러나 인터프리터의 절대 경로는 시스템 환경에 따라 다를 수 있습니다.

2.1. #!/usr/bin/env의 이점

#!/usr/bin/env [interpreter]와 같이 설정하면, 시스템은 환경 변수 $PATH 내에서 지정된 인터프리터의 위치를 찾아서 실행합니다.

  • 예시: #!/usr/bin/env python3
  • 장점: python3가 /usr/bin/python3에 있든, /usr/local/bin/python3에 있든, 절대 경로에 상관없이 인터프리터의 위치를 찾아서 실행할 수 있습니다.
  • 권장: 여러 환경에서 실행해야 할 스크립트일 경우, 이 방식을 사용하는 것이 호환성 측면에서 가장 좋습니다