파이썬 스크립트를 하나의 “명령어”로



#!/usr/bin/env python3

리눅스에서 python 스크립트를 작성할 때 첫줄에 위와 같은 shebang을 넣을 수 있다는 것은 다들 알고 계시죠?
그런데 많은 사람들이 굳이 shebang을 넣지 않는 것 같습니다. 단순히 "python3 라는 명령어를 타이핑 하는 수고를 덜어주는 것에 불과한 것 아니야? 그정도는 그냥 타이핑 하면 되지." 라고 생각하기 때문인 것 같습니다.

"타이핑 좀 덜 하는 기능"이라고 하면 솔직히 별 감흥 없습니다.
그런데 이걸 이렇게 말하면 얘기가 달라집니다.

“내 파이썬 코드를 리눅스 네이티브 명령어처럼 위장시키는 기술”

이건 좀… 솔깃하죠.

pipi process with python script in linux


파이썬 스크립트가 ‘도구’로 승격되는 순간

이 한 줄:

#!/usr/bin/env python3

이걸 단순히 “파이썬 경로 알려주는 것” 정도로 이해하고 있다면
지금까지는 그냥 코드를 실행한 것이고,

이걸 제대로 쓰는 순간부터는
👉 시스템에 도구를 하나 추가한 것이 됩니다.

차이는 생각보다 큽니다.


1. .py라는 족쇄를 끊는다



우리는 습관처럼 이렇게 씁니다:

python3 crawler.py

이건 사실 이런 느낌입니다:

“이거 파이썬 파일인데… 파이썬으로 좀 실행해 주세요…”

굉장히 소극적이죠.

그러나 쉐뱅을 달고 chmod +x 로 실행 권한을 주면 그때부턴 확장자가 필요없게 되죠.

./crawler

뭔가 톤이 완전히 달라집니다.


언어보다는 기능에 집중하게 된다

crawler
backup
log-cleaner
notify

이제 이 파일들이:

  • 파이썬인지

  • C인지

  • Go인지

관심이 없어집니다.

즉, 구현한 도구가 뭐 였는지보다는 그냥 스크립트의 기능 그 자체에 집중하게 됩니다. 이 심리적 차이는 직접 해보면 꽤 크게 느껴집니다.

내 코드는 더이상,

  • script.py가 아니라

  • 리눅스 명령어 하나가 됩니다

ls, grep, awk 옆에 내 코드가 나란히 서게 되는 듯한 기분.

이게 첫 번째 쾌감입니다.


2. 파이프라인 안으로 자연스럽게 스며든다

개인적으로 리눅스의 진짜 힘은 파이프 | 이것이라고 생각합니다. 리눅스의 무수히 많은 장점 중에 이 파이프의 존재는 정말 최고라고 할 수 있습니다.

명령어를 연결해서 👉 하나의 흐름을 만드는 것

이 아름다운 파이프를 쉐뱅 없는 스크립트로 구성한다면 이렇게 되겠죠.

cat access.log | python3 parser.py | python3 filter.py

뭔가… 흐름이 끊깁니다.

  • “아 이건 파이썬이네”
  • “아 또 인터프리터네”

계속 의식됩니다.

그러나 쉐뱅을 장착한 스크립트는 이런 모습이 될 것입니다.

cat access.log | parser | filter | notifier

혹은

ps aux | my-filter | sort | uniq

느낌이 달라지지 않나요?

흐름이 끊기지 않습니다

  • 입력 받고

  • 처리하고

  • 넘기고

이게 그냥 자연스럽게 이어지는 느낌이 듭니다.

조금 과장해서 표현하자면 “파이썬 스크립트”가 아니라 유닉스 철학을 따르는 필터 하나가 된 느낌이 듭니다. 그리고 내 코드가 파이썬의 세계보다는 좀 더 리눅스의 세계로 위치를 변경한 느낌이 듭니다.

3. 파이썬으로 쉽게 만드는 나만의 리눅스 명령어

물론 리눅스에서 간단한 자동화라면 Bash 스크립트가 가장 먼저 떠오를 겁니다. 별도의 패키지 설치(import) 없이도 시스템 명령어들을 마치 제 몸처럼 휘두를 수 있으니까요.

하지만 솔직히 가슴에 손을 얹고 생각해 봅시다. 조건문이 복잡해지고 데이터 구조를 다루기 시작하면, Bash 코드는 어느새 '나중에 읽기 싫은 암호'가 되어버리곤 합니다. 작성할 당시는 코드에 빠져들어서 쉽게 이해되던 것도 수개월 후에 유지보수를 위해 열어봤을 때 답답함을 느끼시진 않았나요?

여기서 파이썬의 진짜 가치가 드러납니다.

  • 가독성의 승리: 수개월 뒤, 유지보수를 위해 파일을 열었을 때의 그 안도감. 파이썬은 내가 과거에 무슨 생각을 했는지 친절하게 설명해 줍니다.

  • 강력한 패키지 생태계: 복잡한 API 호출이나 데이터 처리도 파이썬의 고급 패키지들을 이용하면 단 몇 줄 만에 끝납니다. Bash로 씨름할 시간에 파이썬으로는 이미 구현을 끝내고 커피 한 잔을 마실 수 있죠.

결국 '로직은 파이썬의 생산성으로 짜고, 실행은 리눅스 네이티브 명령어의 간결함으로 한다'는 전략입니다.

.py를 지우고, chmod +x를 선사한 뒤, 그 파일을 PATH 경로 어딘가에 슬쩍 밀어 넣어 보세요. 그리고 터미널에서 딱 한 단어, 예를 들어 deploy라고 입력했을 때 코드가 돌아가는 광경을 지켜보세요.

묘한 쾌감이 밀려올 겁니다. 내가 단순히 코드를 짠 게 아니라, 내 시스템에 영구적으로 존재하는 '나만의 새로운 명령어'를 창조했다는 기분이 들 테니까요.


마무리

쉐뱅은 사소한 문법이 아닙니다.

#!/usr/bin/env python3

이건 그냥 실행 경로가 아니라 단순스크립트에서 명령어로 역할을 변경하는 선언문이라고 말하고 싶다.

독자 여러분도 이제 파이썬 코드에 쉐뱅을 넣고 터미널에서 내 코드 이름을 직접 쳐보세요. 그때 손끝에서 느껴지는 그 감각이 이 기술의 본질입니다.

관련글 읽기