본문 바로가기
Shell

#! 셔뱅이란 (shell)

by yororing 2024. 9. 10.

00 개요

  • shell script 맨 윗줄에 #! 뒤에 경로가 오는 문법에 대한 정리

01 Shebang #!이란

1. 정의

  • Shebang은 script file의 첫 줄에 등장하는 특별한 문법으로, script 실행 시 어떤 interpretor(해석기)를 사용할지 시스템에 지시하는 역할을 함
  • 일반적으로 LINUX와 같은 UNIX기반 운영체제에서 사용됨
  • 이 문법은 #!로 시작하며, 그 뒤에 해당 스크립트를 실행할 인터프리터의 경로를 명시

2. 문법

1) 기본 형식

#!/path/to/interpreter
  • 설명:
    • #! 이후에 나오는 경로는 script를 실행할 interpretor(예: /bin/bash, /usr/bin/python)의 절대 경로

2) /usr/bin/env의 사용

#!/usr/bin/env python
  • 이 형식은 Python script를 실행할 때 많이 사용되는데, /usr/bin/env는 주어진 프로그램을 시스템 환경변수(PATH)에서 찾아 실행하는 역할을 함
  • 이 방법을 사용하면 스크립트 작성자가 특정 경로에 Python이 설치되어 있지 않아도, 사용자가 자신의 환경에 맞는 Python 버전을 실행할 수 있음 
  • 예시
    • 일부 시스템에서는 Python이 /usr/bin/python에 설치되어 있고, 다른 시스템에서는 /usr/local/bin/python에 있을 수 있음
    • env 명령어는 이를 자동으로 감지하고 해당 위치에서 Python을 찾아 실행함
    • 이는 script의 포터블성 (portability)을 높여주기 때문에, 다양한 환경에서 script가 문제없이 실행될 수 있게 함

3. Shebang의 필요성

  • UNIX 시스템에서 script를 실행하려면, 그 sciprt를 어떤 프로그램이 해석해야 할지 명시해야 함
  • 만약 Shebang이 없다면, 사용자는 해당 script를 실행할 때마다 명령어 앞에 interpretor를 명시해야 함
  • 예시
    • Python script를 실행할 때 python script.py 대신, Shebang을 명시하면 단순히 ./script.py만으로도 실행 가능!
# #!/usr/bin/env python가 없는 경우, 명시적으로 Python 호출하여 스크립트 실행
$ python myscript.py

# #!/usr/bin/env python가 있는 경우, 시스템은 env 명령어를 사용해 Python 인터프리터를 찾아 스크립트 실행
$ ./myscript.py

4. Shebang의 장점

  • 자동 interpretor 지정: script 실행 시 별도의 interpretor를 명시할 필요 없이, script 파일 자체에 명시된 interpretor로 실행됨
  • 포터블성 (portability) 향상: /usr/bin/env 방식으로 interpretor를 지정하면, 다양한 환경에서 동일한 script 사용 가능!
  • 코드 간결화: 실행 명령어를 간소화할 수 있어, 사용자의 명령어 입력 오류를 줄일 수 있음

5. 사용 예시

1) Bash script

#!/bin/bash
echo "Hello, world!"

2) Python script

#!/usr/bin/env python3
print("Hello, World!")

6. 요약

  • Shebang은 UNIX 계열 시스템에서 script 실행을 간소화하고, 다양한 환경에서 script가 문제없이 실행되도록 돕는 중요한 요소
  • /usr/bin/env를 이용한 방법은 여러 시스텝에서 python 같은 interpretor 언어를 사용할 때 유용하며 코드의 이식성을 높여줌
  • Shebang을 적절히 사용 시 script 실행 과정이 편리해짐 

'Shell' 카테고리의 다른 글

:의 의미 및 기능 (shell 문법)  (0) 2024.09.26
fatal (exit code variable 종료 상태 변수)  (0) 2024.06.07
test (파일 확인 명령어)  (1) 2024.06.05
while문 사용법 (shell script)  (1) 2024.06.04
Shell Script 함수 만들기  (0) 2024.04.30