티스토리 뷰

쉘 스크립트(shell script)의 시작#!의 뜻

유닉스에서 쉘 스크립트(shell script)의 시작은 #!/bin 으로 시작되고 그 다음에 이 스크립트를 실행할 인터프리터와 그 실행 옵션이 따라오게 됩니다. 따라서 첫 라인은 #!/bin/bash나 #!/bin/tcsh 등과 같이 표기됩니다. 오늘은 그 중 #!의 뜻을 좀더 살펴보고자 합니다.

스크립트의 첫 두글자가 순서대로 숫자기호(#)와 느낌표(!)가 오면 이를 Shebang이라 부릅니다. #!bin/sh, #!/bin/csh, #!/usr/bin/php 등과 같은 사용을 shebang line이라 부르죠.(참조 - http://en.wikipedia.org/wiki/Shebang_(Unix))

발췌 : 위키피디아

이 Shebang Line은 shebang 라인 이후 명령들을 어떻게 해석 할 것인지를 지정해 주는것입니다. 파이썬(python), 루비(Ruby), Bash(본쉘 스크립트) 등으로 말이죠.

구문 (Syntax)

#!interpreter [optional-arg] 과 같은 형식으로 사용합니다. 다음의 예를 보도록 하죠.

#!/bin/sh
#!/bin/csh -f
#!/usr/bin/perl -T
#!/usr/bin/php
#!/usr/bin/python -O
#!/usr/bin/ruby

그런데 파이썬 같은 경우 사용자에 따라서/usr/bin/python, /usr/local/bin/python 또는/home/username/bin/python 처럼 다양하게 쓰이는데 그럴때 마다 절대경로의 shebang line을 기술하면 매번 변경해야 하니 귀찮아 지겠죠. 그럴 경우 /usr/bin/env가 이런shebang의 절대경로 제약사항을 우회하는데 사용됩니다. env는 사용자의 $PATH(환경변수) 상에서 첫번째로 찾은 해당 명령을 실행합니다. 즉 #!/usr/bin/env python 이라 적어주면 환경변수 상에 기재된 파이썬 패스 중에서 가장 먼저오는 것을 실행하는거죠. 이제 환경에 따라서 매번 바꿔줘야 하는 수고는 없어지게 되었네요~ ^^

정리

유닉스 스크립트 첫 라인에 오는 #!은 Shebang이라 부르고 해당 라인을 shebang line이라 부른다. shebang line은 이후 부터 스크립트가 어떻게 해석될지를 지정한다. 또한 절대경로를 사용하는 shebang의 제약을 우회하기 위해 #!/usr/bin/env 명령을 사용한다.