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 테인트 검사 옵션으로 펄을 이용하여 실행
참고
Related Posts
- Ubuntu/Linux - 특정 이름이 들어간 파일 모두 찾고 삭제하기
- Ubuntu/Linux - 특정 이름이 포함된 프로세스 모두 종료
- Ubuntu/Linux - 사용자 계정 이름 확인 (id, whoami)
- Ubuntu/Linux - E: unable to locate package 에러 해결
- Ubuntu 22.04/20.04 - Yarn 설치 방법
- Linux/Ubuntu - grep 명령어로 문자열 검색
- Linux/Ubuntu - 터미널에서 seq로 명령어 N회 반복
- Linux/Ubuntu - wc 명령어로 Line(줄) 개수 세기
- bash: pip: command not found 문제 해결 (Linux/Ubuntu)
- Ubuntu 22.04 - Swap 메모리 늘리기
- Linux - 파일이 수정된 날짜/시간 확인 방법
- Linux - 파일, 디렉토리 삭제 명령어(rm -rf, rmdir)
- 우분투 22.04 - deb 파일 설치하기
- Ubuntu 20.04 - OpenJDK 11 설치, 삭제
- Linux - ps 명령어로 실행 중인 프로세스(PID) 확인
- Ubuntu 20.04 - SSH 설치와 접속 방법
- Ubuntu에서 PPA 저장소 추가, 제거 방법
- Ubuntu 22.04 - Brave 브라우저 설치
- Ubuntu 22.04 - 프로스트와이어(FrostWire) 설치
- Ubuntu 22.04 - Remmina 설치 방법
- Ubuntu 22.04 - Rust 설치하기
- Ubuntu 22.04 - 텔레그램 설치하기
- Ubuntu - Deluge 토렌트 클라이언트 설치
- Ubuntu JDK 17 (OpenJDK) 설치, 삭제
- Ubuntu 20.04 스팀(Steam) 설치 방법
- Ubuntu에서 draw.io 설치하는 방법
- 우분투에 VMware 설치하기
- [Ubuntu] VMware에서 Windows 11 설치
- Vi/Vim에서 1줄 또는 여러줄 삭제 방법
- Vi/Vim에서 라인 번호 표시하 기
- 우분투에서 rar 압축, 압축 풀기
- Ubuntu에서 구글 드라이브 사용하기 (로컬 폴더에 마운트)
- [Ubuntu] apt-cache search, 설치 가능한 패키지 검색
- Ubuntu - DNS 캐시 삭제 방법
- Ubuntu에서 사용할 수 있는 Text Editor 소개