셔뱅

해시 기호와 느낌표(#!)로 이루어진 문자 시퀀스

셔뱅(shebang)은 해시 기호느낌표(#!)로 이루어진 문자 시퀀스로, 스크립트의 맨 처음에 온다. 샤-뱅(sha-bang)[1][2][3], 해시뱅(hashbang)[4][5], 파운드-뱅(pound-bang)[2][6], 해시-플링(hash-pling)[2][7], 크런치뱅(crunchbang)이라고도 한다.

#!
셔뱅

유닉스 계열 운영 체제에서 셔뱅이 있는 스크립트는 프로그램으로서 실행되며, 프로그램 로더가 스크립트의 첫 줄의 나머지 부분을 인터프리터 지시자(interpreter directive)로 구문 분석한다. 즉, 지정된 인터프리터 프로그램이 대신 실행되어 스크립트의 실행을 시도할 때 처음 사용되었던 경로를 인수로서 넘겨주게 된다.[8] 이를테면 스크립트의 경로가 path/to/script이고 다음의 줄로 시작한다면:

#!/bin/sh

프로그램 로더는 프로그램 /bin/sh를 대신 실행하되 path/to/script를 첫 번째 인수로 넘겨준다.

셔뱅 줄은 일반적으로 인터프리터에 의해 무시되는데 그 까닭은 "#" 문자가 수많은 스크립트 언어에서 주석 표시자이기 때문이다. 스킴처럼 해시 마크를 주석 시작으로 사용하지 않는 일부 언어 인터프리터들은 목적에 맞게 셔뱅 줄을 무시하기도 한다. 다른 해결 방안으로는 전처리기에 의존하여 스크립트의 나머지 부분이 컴파일러나 인터프리터에 넘겨지기 전에 셔뱅 줄을 제거하거나 평가하게끔 하는 방법이다. 이를테면 여러 운영 체제에서 프리 파스칼로 작성된 프로그램을 실행할 수 있도록 하는 InstantFPC의 경우가 그러하다.[9]

문법 편집

셔뱅 인터프리터 지시자의 형태는 다음과 같다:[8]

#!interpreter [optional-arg]

여기서 interpreter는 실행 프로그램의 절대 경로여야 한다. (인터프리터 프로그램이 스크립트인 경우 셔뱅도 함께 포함해야 함) optional-arg는 선택 사항으로서 넣지 않아도 되며, 넣을 경우 하나의 변수여야 한다. (이식성을 이유로 어떠한 공백도 포함하지 않아야 함) #! 다음의 공백은 선택 사항이다.[2]

편집

셔뱅 줄의 예는 다음과 같다:

  • #!/bin/sh/bin/sh 경로의 본 셸 또는 호환 셸을 이용하여 파일을 실행
  • #!/bin/csh -fC 셸(csh) 또는 호환 셸을 이용하여 파일을 실행하고, 시작 시 사용자의 .cshrc 파일의 실행을 방지
  • #!/usr/bin/perl -T테인트 검사 옵션으로 을 이용하여 실행

같이 보기 편집

각주 편집

  1. “Advanced Bash Scripting Guide”. 2012년 1월 19일에 확인함. 
  2. “The #! magic, details about the shebang/hash-bang mechanism”. 2012년 1월 19일에 확인함. 
  3. Cooper, Mendel (2010년 11월 5일). 《Advanced Bash Scripting Guide 5.3 Volume 1》. lulu.com. 5쪽. ISBN 978-1-4357-5218-4. 
  4. MacDonald, Matthew (2011). 《HTML5: The Missing Manual》. Sebastopol, California: 오라일리 미디어. 373쪽. ISBN 978-1-4493-0239-9. 
  5. Lutz, Mark (September 2009). 《Learning Python》 4판. 오라일리 미디어. 48쪽. ISBN 978-0-596-15806-4. 
  6. Lie Hetland, Magnus (2005년 10월 4일). 《Beginning Python: From Novice to Professional》. Apress. 21쪽. ISBN 978-1-59059-519-0. 
  7. Schitka, John (2002년 12월 24일). 《Linux+ Guide to Linux Certification》. Course Technology. 353쪽. ISBN 978-0-619-13004-6. 
  8. “execve(2) - Linux man page”. 2010년 10월 21일에 확인함. 
  9. InstantFPC documentation

외부 링크 편집