HOME > linux > cmds

리눅스 - 쉬뱅(Shebang)은 무엇인가?

JSFollow27 Feb 2019

Shebang은 (사전에 검색해보면) 쉬뱅이라고 읽습니다. 쉬뱅은 #!로 시작하는 문자열이며 스크립트의 맨 첫번째 라인에 있습니다. 쉬뱅은 유닉스 계열 운영체제에서 스크립트가 실행될 때, 파이썬, 배쉬쉘 등 어떤 인터프리터에 의해서 동작이 되는지 알려줍니다.

쉬뱅으로 스크립트 실행해보기

예를들어 아래와 같은 코드는, 특별한 인터프리터가 지정되지 않으면 파이썬2 로 실행됩니다.

#!/usr/bin/python2
import sys
print("python version: %s"%sys.version_info[0])

물론 이 파일은 실행 가능한 파일이어야 합니다. 아래처럼 실행가능하도록 권한을 부여하고 실행을 해줘야 합니다.

$ chmod +x shebang.py
$ ./shebang.py

결과를 보면 파이썬2로 실행되었습니다. sys.version_info[0]는 파이썬의 버전을 출력하는 코드입니다.

python version: 2

env를 사용하여 스크립트 실행하기

쉬뱅을 #!/usr/bin/python2로 설정하면 항상 파이썬2로 실행됩니다. 만약 환경변수에 설정되어있는 파이썬 버전을 사용하고 싶을 수 있습니다.

이럴 때는 #!/usr/bin/env python를 사용해야 합니다.

#!/usr/bin/env python
import sys
print("python version: %s"%sys.version_info[0])

먼저 테스트를 해볼께요. 현재 저의 환경변수는 파이썬3로 설정되어있습니다.

$ python --version
Python 3.7.0

위처럼 쉬뱅을 변경하고 실행하면 파이썬3로 실행되는 것을 볼 수 있습니다. 만약 환경변수를 파이썬2로 변경하면 파이썬2로 실행됩니다.

$ ./shebang.py
python version: 3

env는 유닉스 및 유닉스 계열 운영 체제용 셸 명령어입니다. 환경 변수의 목록을 출력하거나, 다른 유틸리티를 실행하는데 사용할 수 있습니다.

위의 코드는 env를 이용하여 $PATH에 가장 먼저 검색되는 파이썬 버전으로 스크립트를 실행할 수 있습니다.

버전 입력과 env 사용의 장단점

버전을 직접 입력하면 환경변수에 영향을 받지 않고 항상 원하는 인터프리터 버전으로 실행할 수 있습니다. 단점은, 직접 입력한 위치에 인터프리터가 설치되어있지 않다면 실행할 수 없습니다. 다양한 환경에서 실행되는 스크립트의 경우 문제가 있을 수 있습니다.

반면에 env를 사용하면 환경변수에 설정된 인터프리터, 예를들어 파이썬으로 실행할 수 있습니다. 하지만 파이썬을 버전 2로 설치했는지 3으로 설치했는지에 따라서 다르게 동작할 수 있습니다.

그외 쉬뱅이 사용되는 케이스

쉬뱅은 아래와 같은 방식으로 사용되고 있습니다.

  • #!/bin/sh: /bin/sh 경로의 본 셸 또는 호환 셸을 이용하여 파일을 실행
  • #!/bin/csh -f: C 셸(csh) 또는 호환 셸을 이용하여 파일을 실행하고, 시작 시 사용자의 .cshrc 파일의 실행을 방지
  • #!/usr/bin/perl: T 테인트 검사 옵션으로 펄을 이용하여 실행

참고