Shebang 이란?
- Sharp(#)' + 'Bang(!)의 합성어
#!
은 2Byte의 매직넘버(magic number)로 Unix계열 OS(리눅스, Mac)에서 스크립트(bash, python등등) 코드 최상단에서 해당 파일을 해석해 줄 인터프리터의 절대경로를 지정- 스크립트를 실행할 때 (예 :
./script
명령 줄에서) Linux는 스크립트를 실행하는 데 사용되는 프로그램을 파악하기 위해 shebang 줄이라는 특수 줄을 사용합니다.
예)#!/bin/bash
⇒ Bash 스크립트#!/usr/bin/env python3
⇒ Python 스크립트용. - shebang 줄이 없으면 기본적으로 Bash에서 스크립트를 실행. (즉, 쉘 스크립트로)
- 셸 스크립트가 아니라 파이썬 스크립트일 경우
#!/bin/bash
로 명시가 되있다면 Bash에서 Python 코드를 셸 스크립트로 해석하려고하여 많은 오류가 발생합니다.
구성
#!interpreter [optional-arg]
- '#!' 바로 뒤에 interpreter 경로가 온다. ⇒ 절대 경로
그 뒤에는 인터프리터를 위한 인자들이 온다. ⇒ 선택 사항 - 매직 바이트가
#
문자로 시작하는 이유는 많은 인터프리터 언어에서#
문자가 주석으로 사용되기 때문에 실제 스크립트 편집에서 주석처럼 무시되기 때문
예시
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
#!/usr/bin/php
env
-
시스템에 따라 인터프리트 경로가 달라질 수 있기 때문에 사용하는 방법
(예를 들어/bin/python
와/usr/bin/python
) -
#!/usr/bin/env + 언어
의 형태로 입력#!/usr/bin/env bash #!/usr/bin/env python #!/usr/bin/env perl #!/usr/bin/env php
Shebang을 안썼을 때 오류가 나는 케이스
-
파이썬 스크립트 파일을 실행하려고 할 때
python test.py
로 실행하면 별 다를게 없이 실행이 잘 된다# test.py user = input("What's your name?\n=> "); print(f"Hello {user}. Welcome!"); ## # 실행 결과 # $ python test.py # ./test.py: 1: Syntax error: "(" unexpected ##
-
하지만 chmod +x test.py를 주고 ./test.py의 형식으로 실행을 할 경우, 실행이 되지 않는다.
```
# test.py
user = input("What's your name?\n=> ");
print(f"Hello {user}. Welcome!");
##
# 실행 결과
# $ chmod +x test.py
# $ ./test.py
# ./test.py: 1: Syntax error: "(" unexpected
##
```
-
이 경우에
#!/usr/bin/env python
을 써주게 되면 제대로 실행 된다.# test.py #!/usr/bin/env python user = input("What's your name?\n=> "); print(f"Hello {user}. Welcome!"); ## # 실행 결과 # $ chmod +x test.py # $ ./test.py # What's your name? # => Sondho # Hello Sondho, Welcome! ##
댓글