Uinx/Linux: Shebang과 env에 대한 설명 (#!/usr/bin/env)
유닉스 계열의 Command Line에서 실행시키는 스크립트를 확인해보면 첫 줄에 "#!" 시작하는 코드가 있습니다.
영어로 "Shebang"이라고 하는데 한글로는 "쉬뱅"으로 전 읽는데 편하신데로 읽으시면 될거 같습니다. (표준이된 한글 명칭이 있는지 모르겠네요.)
어원은 "Wikipedia: Shebang (Unix)"페이지에 잘 나와있는데 유닉스 계열에서는 sharp(#) + bang(!) 합성어로 sha-bang 이라 합니다.
"#!"은 2Byte의 매직넘버(magic number)로 이 스크립트를 실행시켜줄 프로그램의 경로를 지정하는 역활입니다.
(예시 1)
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
#!/usr/bin/php
그런데 프로그램의 경로는 시스템 환경에 따라 달라질 수 있습니다. 그때 사용하는 것이 "env" 입니다.
"#!/usr/bin/env + 언어" 식으로 입력하는 방법이 있습니다.
(예시 2)
#!/usr/bin/env bash
#!/usr/bin/env python
#!/usr/bin/env perl
#!/usr/bin/env php
"(예시 1)"과 같이 절대 경로를 입력하거나 "(예시 2)" 처럼 입력해도 동일하게 실행됩니다.
env는 환경 변수에서 지정한 언어의 위치를 찾아서 실행됩니다. 다양한 환경에서 실행되는 스크립트라면 "env"를 사용하는 것이 좋습니다.
env 명령어 보충 설명
옵션 | 설명 |
---|---|
-, -i, --ignore-environment | 현재 환경을 무시하고 지정한 값을 사용 |
-u, --unset=NAME | 지정한 변수 제거 |
--help | 도움말 표시 |
--version | 버전 정보 표시 |
# 환경 변수 정보 출력
env
# 환경 변수 정보 변경
env -i HOSTNAME=test.com
# 환경 변수 정보 변경
env -u HOSTNAME
# env 이용한 bash 실행하기
/usr/bin/env bash --version
함께보기
- KLDP: #! 으로 시작하기
- Wikipedia: Shebang (Unix)
- Wikipedia: env
- The #! magic, details about the shebang/hash-bang mechanism on various Unix flavours
- Why is it better to use “#!/usr/bin/env NAME” instead of “#!/path/to/NAME” as my shebang?
- What is the preferred Bash shebang?