크래프톤정글이야기/TIL - WIL

[TIL250710] 너 주석아니였어 ? Shebang?

Study & Stack 2025. 7. 10. 00:20
728x90

 

(쇼뱅 아님 셔뱅임..)

bash: ./driver.sh: cannot execute: required file not found

이라는이상한 오류가 떴다. 분명히 파일도 있고, 실행 권한도 있는데도 실행이 안 되는 이상한 상황.

삽질 과정

  1. 셔뱅(Shebang) 확인 요청을 받음→ 경로 바꿈..
  2. → 경로 지정이 잘못 되어 있을 수도 있어!
#!/usr/bin/env python3
  1. 그래도 안 됨 → 줄바꿈 형식(CRLF vs LF) 의심

3.정상 실행됨.

→ 원인은 Windows에서 복사된 파일의 CRLF 줄바꿈 형식이 bash에서 인터프리터 해석을 망가뜨렸기 때문.

그래서? Shebang(셔뱅)이란 뭔데?

#!/usr/bin/env bash

이건 이렇게 해석됩니다:

"사용자 환경(PATH)에 등록된 폴더들 중에서 bash를 찾아서 실행해!"

즉:

  1. env는 현재 사용자의 PATH 환경변수를 참고해서
  2. 그 안에 들어 있는 디렉토리들(예: /usr/local/bin, /usr/bin, /bin 등)에서
  3. 가장 먼저 찾은 bash 실행 파일을 실행합니다.
  • 셔뱅은 주석처럼 보이지만 단순한 주석이 아님!
  • 운영체제가 이 파일을 어떤 인터프리터로 실행해야 할지 알려주는 메타 정보.
  • env를 통해 bash, python3, sh 등 다양한 해석기를 동적으로 지정 가능.

왜 인터프리터를 못 찾게 되는 걸까?

리눅스에서 실행 가능한 스크립트는 단순한 텍스트 파일이기 때문에,

어떤 프로그램이 이 파일을 읽고 해석할지(=인터프리터) 지정해줘야 해요.

이를 명시적으로 지정하는 방식이 바로 Shebang(셔뱅) 입니다.

셔뱅이 없으면 어떻게 되나?

  • chmod +x로 실행 권한이 있어도…
  • 맨 위 줄에 인터프리터 정보가 없거나 잘못되었으면 실행 자체가 막히게 된다.

정리하며

  • 나는 주석인 줄 알았던 셔뱅이 실행 자체를 결정짓는 키였다는 걸 이번에 처음 알았다.
  • 이젠 "쇼뱅 아니고 셔뱅"이라고 자신 있게 말할 수 있다. (사실 물어봄)
728x90