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버전 정보 표시
(예시 3)
# 환경 변수 정보 출력
env

# 환경 변수 정보 변경
env -i HOSTNAME=test.com

# 환경 변수 정보 변경
env -u HOSTNAME

# env 이용한 bash 실행하기
/usr/bin/env bash --version

함께보기