포트폴리오용 프로젝트의 AWS 지원이 끊김에 따라 데모를 로컬에서 쉽게 실행시키기 위해서 쉘 스크립트를 작성했습니다.
처음으로 쉘 스크립트를 작성해 보는 것이라 문법적으로 신기한 점이 많았고, 또 sh파일을 열어보면 볼 수 있는 익숙한 코드도 많았습니다.
sh확장자로 된 파일을 열면 항상 첫째줄에 주석으로
#!/bin/bash를 볼 수 있었는데, 이번에 쉘 스크립트를 직접 작성하며 이 코드가 왜 필요한지 알아봤습니다.
제가 셔뱅을 많이 본건 husky라는 git hook 라이브러리를 사용하면서입니다.
husky를 사용하면 git과 관련한 동작(commit, push 등) 전후로 다양한 작업을 수행할 수 있습니다.
해당 라이브러리를 설치하고 초기화를 하면 .husky라는 폴더가 생기는데, 하위에 다양한 스크립트 파일이 자동으로 생성됩니다.

예를 들어 pre-commit 스크립트를 열어보면
#!/usr/bin/env sh
npx lint-staged
다음과 같이 셔뱅을 흔하게 볼 수 있습니다.
그렇다면 셔뱅은 어디에 사용되는 걸까요?
셔뱅이란?
셔뱅(#!)은 유닉스 계열 운영체제(맥, 리눅스 등)에서 사용되는 개념입니다.
셔뱅(#!)은 스크립트 파일의 첫 번째 줄에 위치하는 특수 문자 시퀀스로, 해당 스크립트를 어떤 인터프리터로 실행할지 운영체제에게 알려주는 역할을 합니다.
셔뱅은 해당 스크립트를 지정된 프로그램으로 해석하고 실행하도록 도와줍니다.
예를 들면 다음과 같습니다.
#!/bin/sh # 본 쉘을 사용하여 현재 스크립트를 실행
#!/bin/csh # C 쉘을 사용하여 현재 스크립트를 실행
#!/usr/bin/python # 사용자의 bin에 있는 python으로 현재 스크립트를 실행
env
그런데 다음과 같이 시스템환경마다 인터프리터 설치 경로가 다르면 어떻게 할까요?
# 시스템별 경로 차이
/usr/bin/python3 # Ubuntu/Debian
/usr/local/bin/python3 # macOS (Homebrew)
/opt/python/bin/python3 # 일부 서버
이런 경우에 env를 사용하면 시스템마다 설치 경로를 신경 쓰지 않아도 됩니다.
#!/usr/bin/env python3
다음과 같이 env를 사용하면 PATH 환경변수에서 프로그램을 찾아 첫 번째로 발견한 프로그램을 실행합니다.
셔뱅을 쓰면 좋은점이 뭘까?
그렇다면 셔뱅(#!)을 쓰면 좋은점이 뭘까요? 셔뱅을 작성하지 않으면 스크립트를 실행하지 못할까요?
물론 셔뱅을 쓰지 않아도 스크립트를 실행할 수 있습니다.
다만 셔뱅을 사용하면 스크립트를 실행할 때 인터프리터를 앞에 명시하지 않아도 됩니다.
# 셔뱅이 없을 경우 다음과 같이 명시해줘야함
> bash script.sh
# 셔뱅이 스크립트에 있을경우 다음과 같이 실행시킬 수 있음
> ./script.sh
참고한 자료
https://ko.wikipedia.org/wiki/%EC%85%94%EB%B1%85
셔뱅 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 셔뱅(shebang)은 해시 기호와 느낌표(#!)로 이루어진 문자 시퀀스로, 스크립트의 맨 처음에 온다. 샤-뱅(sha-bang)[1][2][3], 해시뱅(hashbang)[4][5], 파운드-뱅(pound-bang)[2][6]
ko.wikipedia.org
https://blog.gaerae.com/2015/10/what-is-the-preferred-bash-shebang.html
Uinx/Linux: Shebang과 env에 대한 설명 (#!/usr/bin/env)
Uinx/Linux: Shebang과 env에 대한 설명 (#!/usr/bin/env)
blog.gaerae.com