Linux: What is Shebang? - IKSciting
2029
post-template-default,single,single-post,postid-2029,single-format-standard,bridge-core-2.8.7,qodef-qi--no-touch,qi-addons-for-elementor-1.7.1,qode-page-transition-enabled,ajax_fade,page_not_loaded,,qode-title-hidden,qode_grid_1300,footer_responsive_adv,qode-content-sidebar-responsive,qode-theme-ver-27.1,qode-theme-bridge,qode_header_in_grid,wpb-js-composer js-comp-ver-6.6.0,vc_responsive,elementor-default,elementor-kit-838

What is Shebang?

Linux에서 script를 열었을 때 첫 줄이 #!로 시작하는 경우를 종종 보게 된다. 이를 shebang이라고 부르는데 어원에 대해서는 sharp + bang, hash + bang, shell + bang 등 여러가지 설이 있지만 이름이나 어원은 사실 크게 중요한 것은 아니다. Shebang line이 script에서 수행하는 역할을 이해하는 것만으로 충분하다.

#!/bin/bash
#!/bin/csh

예를 들어 script.py라는 Python script가 있다고 가정하자. 이 script를 실행하기 위해서는 아래와 같은 command를 수행해야 한다.

$ /path/to/python script.py

이제 script.py의 시작 부분에 아래와 같이 shebang line을 추가해보자.

#!/usr/bin/python

그리고 chmod 명령어를 이용하여 script.py에 실행 권한을 추가한다.

$ chmod +x script.py

이로써 Python 명령어, 즉, python을 직접 사용하지 않고도 script.py 실행이 가능하게 된다. Shebang line에 기술된 Python 명령어의 절대경로를 이용하여 자동으로 script가 실행되는 것이다.

$ script.py

Shebang line은 또 다른 방식으로도 기술할 수 있다. 이번에는 Python 명령어의 위치를 직접적으로 기술하는 것이 아니라 env의 경로와 함께 Python 명령어의 이름을 기술한다. 해당 방식을 사용하면 사용자의 환경, 즉, $PATH에서 Python 명령어의 위치를 자동으로 찾고 해당 명령어를 이용하여 script를 실행하게 된다.

#!/usr/bin/env python

Summary

위에서 확인한 것과 같이 shebang을 사용하면 기본적으로 script를 더 쉽고 간편하게 실행할 수 있다는 장점이 있다. 두 방식 간에 차이가 있으므로 상황에 맞게 적절한 방식을 사용하면 된다.

경우에 따라 Linux 상에 /usr/bin/python 외에 여러 경로에 서로 다른 Python이 설치되어 있을 수 있다. 즉, 사용자에 따라 사용하는 Python의 버전이 다를 수도 있다는 의미다. 하지만 첫 번째 방식으로 shebang line을 기술함으로써 특정 Python 명령어를 기본적으로 사용하도록 설정할 수 있게 된다. 반면 두 번째 방식으로 shebang line을 기술하는 경우 shebang line 기술 시 Python 명령어의 절대경로를 몰라도 무관할 뿐만 아니라, Python 명령어의 위치가 변경되더라도 영향을 받지 않는다. 또한 사용자가 설정한 환경에 자동으로 맞추어지는 것이 유리한 경우 이점을 갖는다.

References

Tags:
3 Comments
  • 하코형
    Posted at 12:48h, 17 September

    쉬뱅. env 방법 꿀팁이네요. 감사합니다

    • IKS
      Posted at 12:49h, 17 September

      감사합니다.

  • IKS
    Posted at 08:54h, 23 June

    Comment disabled due to spam comments.