#!
sharp(#) + bang(!)의 합성어, shebang이라 한다.
- 2byte의 매직 넘버(magic number)로 이 자체가 하나의 기호
- 스크립트를 실행시킬 프로그램의 경로를 지정하는 역할
- 이 뒤에 나오는 것은 경로명, 명령어들을 해석할 프로그램의 위치를 나타냄
- 경로가 정확하지 않다면
bad interpreter
발생 - 다른 인터프리터를 지정하면 문법 오류 발생
문법
#!<interpreter> [optional-arg]
#!
뒤에 공백이 하나 있어도 동작<interpreter>
에는 프로그램의 절대경로 입력
예시
#!/bin/sh
#!/bin/bash
#!/usr/bin/php
#!/usr/bin/python -O
#!/usr/bin/env bash
#!/usr/bin/env
interpreter
에 들어갈 프로그램의 절대 경로는 시스템에 따라 달라질 수 있다.
ex) 파이썬을 예로 들면/bin/local/python
또는/usr/bin/python
에 위치할 수도 있고
버전도 python2와 python3이 둘다 설치되어 있을수 있다.- 이럴 때
#!/usr/bin/env
로 설정하면 절대경로에 상관없이 인터프리터의 위치를 찾아서 살행env
는 사용자의 $PATH(환경변수)에서 첫번째로 찾은 명령를 찾아서 실행됨- 다양한 환경에서 실행되는 스크립트라면
env
사용하기
예시
# 환경 변수 정보 출력
env
# 환경 변수 정보 변경
env -i HOSTNAME=test.com
# 환경 변수 정보 변경
env -u HOSTNAME
# env 이용한 bash 실행하기
/usr/bin/env bash --version
테스트
1. vi test
파일 작성
#!/usr/bin/env bash
echo "Hello, This is Bash"
2. 실행 권한 추가하고 실행
# 권한 추가
$ chmod +x test
# 실행
$ ./test
Hello This is Bash
3. 다시 파일을 열고 인터프리터를 파이썬으로 지정
#! /usr/bin/env python
echo "Hello This is Bash"
4. 파이썬 문법에 맞지 않아 오류 발생
$ ./test
File "./test", line 3
echo "Hello This is Bash"
^
SyntaxError: invalid syntax
5. 파일 열고 파이썬 문법으로 수정
#! /usr/bin/env python
print "Hello This is Python"
6. 파일 실행하면 정상적으로 작동함
$ ./test
Hello This is Python
참고
https://blog.gaerae.com/2015/10/what-is-the-preferred-bash-shebang.html