Shebang 실행 메커니즘 정리

이 글은 AI가 작성했습니다.

개요

이 문서는 shebang에 대해 정의와 목적, 형식, 사용법, 권한 설정, 주의사항을 설명합니다.

정의

shebang은 스크립트 파일의 첫 줄에 위치하는 문자 시퀀스입니다. 보통 #!로 시작하며 이후에 인터프리터의 절대 경로 또는 인터프리터를 찾기 위한 명령을 표기합니다.

목적

shebang은 운영체제가 스크립트를 직접 실행할 때 사용할 인터프리터를 지정합니다. 사용자는 인터프리터를 명시하지 않고도 파일을 실행할 수 있습니다.

형식

일반적인 형식은 #! /경로/인터프리터 [옵션]입니다.
예시로는 #!/bin/bash입니다.
포터블한 방식으로는 #!/usr/bin/env python3입니다.
/usr/bin/env를 사용하는 경우 환경 변수 PATH에서 인터프리터를 찾아 실행합니다.

동작 원리

유닉스 계열 시스템에서 실행 가능한 파일을 실행하면 커널이 파일의 첫 바이트를 검사합니다.
파일이 텍스트이고 첫 줄이 #!로 시작하면 커널은 뒤의 내용을 해석합니다.
커널은 지정된 인터프리터를 실행하고 스크립트 파일 경로를 인수로 전달합니다.

사용법

  • 스크립트 파일의 첫 줄에 shebang을 추가합니다.
  • 파일에 실행 권한을 부여합니다. 예: chmod +x 파일명입니다.
  • 스크립트를 실행하려면 ./파일명 형태로 호출합니다.
  • 또는 인터프리터를 명시하여 bash 파일명 또는 python3 파일명처럼 실행해도 동작합니다.

권한 설정

shebang만으로는 실행이 불가합니다.
파일에 실행 권한이 있어야 합니다.
권한 설정은 chmod +x 파일명 명령으로 수행합니다.
권한이 없는 경우 인터프리터를 명시하여 실행하면 됩니다.

권장 관행

  • 인터프리터 경로 차이를 완화하려면 /usr/bin/env를 사용합니다. 예: #!/usr/bin/env python3입니다.
  • 스크립트의 호환성을 고려해 사용할 인터프리터와 옵션을 명확히 지정합니다.
  • 바이너리 실행 파일과 텍스트 스크립트를 구분해 관리합니다.

주의사항

  • shebang에 지정한 경로는 절대 경로여야 합니다. 잘못된 경로를 지정하면 실행이 실패합니다.
  • 인터프리터를 명시적으로 호출하여 실행하는 경우 shebang은 무시됩니다.
  • Windows에서는 기본적으로 shebang을 실행 메커니즘으로 사용하지 않습니다. Windows 환경에서는 파일 연결이나 실행 래퍼를 사용해야 합니다.
  • shebang 줄에 공백이나 특수 문자가 포함되면 해석 오류가 발생할 수 있습니다.
  • 일부 시스템에서는 shebang 뒤의 전체 문자열 길이에 제한이 있으므로 긴 옵션 사용에 주의합니다.

예시

  • Bash 스크립트: #!/bin/bash입니다.
  • 파이썬 스크립트(포터블): #!/usr/bin/env python3입니다.