Linux/Shell Script

[Shell Script] #! - Shebang

비번변경 2022. 9. 24. 18:10

#!

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이다.

#!/bin/bash -x 실행 예시

 

 

특징

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