#!
shebang, sharpbang, shabang, hashbang 등으로 칭해지는 문자로, 스크립트 파일의 첫 줄에 사용하여 스크립트가 어떤 명령으로 실행될지를 지정한다. 명령어의 경로는 절대 경로 또는 현재 디렉터리로부터의 상대 경로로 지정할 수 있다.
변수는 사용할 수 없고, 사용할 수 있는 옵션은 하나로 제한된다.
예시
#! /bin/bash # bash 스크립트 실행을 위한 shebang line
...
#! /bin/sed -f # sed 스크립트 실행을 위한 shebang line
...
#! /usr/bin/awk -f # awk 스크립트 실행을 위한 shebang line
...
#! /usr/bin/perl # perl 스크립트 실행을 위한 shebang line
...
#! /usr/bin/python # python 스크립트 실행을 위한 shebang line
...
OS가 실행 권한을 가진 파일을 실행할 때 #! 문자를 만나면, 뒤의 이어지는 라인은 해당 파일을 실행가기 위해 인터프리터로 취급한다.
아래는 #!/bin/bash -x shebang을 가진 test.sh을 실행했을 때의 ps이다.
특징
1. bash 명령을 이용해 스크립트 파일을 실행하면, 파일에 지정되어있던 shebang이 bash에 의해 주석 처리되고 무시된다.
2. shebang에 주석이 있으면 오류가 발생한다.
3. 스크립트 파일을 직접 실행시킬 때 외에는 shebang을 사용하지 않아도 된다. 예로 들어, source 명령으로 읽어 들이는 스크립트, ~/.bashrc, ~/.profile와 같은 환경설정 파일, 명령 자동완성 함수 등에는 shebang을 사용하지 않아도 된다.
#!/usr/bin/env
OS 별로 실행 프로그램의 위치가 다를 때는 #!/usr/bin/env을 이용할 수 있다.
예로 들어 python은 /usr/bin/python, /usr/local/bin/python 또는 그 외의 경로에 위치할 수 있는데, 이 경우 다음과 같이 사용하면 $PATH를 검색해서 python을 실행한다.
#!/usr/bin/env python
추가로 env -S 옵션을 사용하면 shebang에서도 여러 개의 옵션을 사용할 수 있다.
#!/usr/bin/env -S gawk -v AA=100 -f
BEGIN {
print "AA : " AA
}
참고 문서
https://mug896.github.io/bash-shell/shebang.html