2011-03-29 5 views
15

Groovy 스크립트로 실행해야하는 파일의 시작 부분에 선언 할 수 있습니까? 다른 스크립트 언어에 대한Shebang and Groovy

예 : (즉, 위치 인 경우)

#!/bin/sh 
#!/usr/bin/python 
#!/usr/bin/perl 
+7

#! 당신이 코멘트로부터 알 수 있듯이, 내가 그것에 대해 알지 못했던 "shebang"이라고 불린다. – Nulldevice

+0

shebang 라인의 첫 번째 단어는 실행 가능한 바이너리 여야한다. "Groovy"프로그램이 쉘 스크립트라면, #!/usr/bin/env groovy 형식을 사용해야합니다. –

+1

재미있는 점은 검색이이 페이지를 정확하게 반환한다는 것입니다. 스택 오버플로는 실제로 이와 같은 간단한 질문에도 최상의 리소스입니다. 다른 사람들은 여기에 직접 와서 다른 블로그 게시물을 탐색하는 대신 권위있는 대답을 얻습니다. –

답변

39

이 하나 #!/usr/bin/env groovy
당신의 경로를 찾고 검색합니다 스크립트

+3

제한 사항은 Linux에서 shebang을 사용할 때 classpath와 같은 인수를 groovy에 부여 할 수 없다는 것입니다. [이 답변] (http://stackoverflow.com/a/8945888/54396)을 참조하십시오. – Patrick

5

this에 따르면 당신이 #!/usr/bin/groovy를 사용할 수 있습니다. 찾고있는 검색어는 shebang (첫 번째 줄이 무엇인지)입니다.

+0

감사합니다!그 조합 #! 특별한 이름이 있지만 기억하지 못했습니다. – Nulldevice

+0

기억하는 데 도움이된다면 그 줄의 시작 기호는 "날카로운"** # **이고 interrobang **! **, 즉 "shebang"이라는 용어입니다. – mfortner

+0

@mfortner 좋은 니모닉이지만 느낌표는 강타이지만 속어는 아닙니다. [interrobang] (https://en.wikipedia.org/wiki/Interrobang)은 조합 느낌표/물음표 기호 (‽)입니다. –

1

일반적인 트릭은 또한 "수개 국어"스크립트로 알려진 하나 개 이상의 언어로 의미있는 스크립트를 작성하는 것입니다을 실행할 그루비. 강타와 그루비의 경우

이 특히 쉽게 :

#!/bin/sh 
//bin/true; exec groovy -cp .. "$0" 

println "Hello from Groovy" 
  1. 첫 번째 줄은 정규 쉘 스크립트와 같은 스크립트를 실행하기 위해 OS를 알려주는 오두막 (#!)입니다.
  2. 두 번째 줄은 셸에 의해 실행될 때 /bin/true 명령 (no-op)을 호출합니다. PATH에서 groovy 실행 파일을 찾고 스크립트 파일 자체 ("$0")와 추가 인수를 사용하여 현재 쉘 프로세스를 대체합니다 (exec)
  3. 그루비가 주류이기 때문에 첫 번째 줄을 무시합니다. 두 번째 줄은 주석 (//)이기 때문에 무시하고 나머지 스크립트를 실행합니다.

좀 더 정교한 쉘 부분을해야 할 경우, 아마도 환경 변수를 설정하거나 그루비가 설치되어있는 경우, 다른 트릭을 사용할 수 있습니다 발견 : 다시

#!/bin/sh 
'''': 
echo Hello from Shell 
exec groovy -cp .. "$0" 
''' 

println "Hello from Groovy" 
  1. 의 오두막 신호를 운영 체제가이 파일을 쉘 스크립트로 실행하기 시작합니다.
  2. 쉘은 을 두 개의 빈 문자열 '' 다음에 콜론 (no-op)으로 구문 분석합니다. 그것이 exec 또는 exit
  3. 을 찾을 때까지
  4. 쉘은 모든 것이 정상이라면, 쉘 스크립트 파일 자체 ("$0")
  5. 에 그루비 명령을 실행, 파일의 나머지 라인으로 라인을 실행합니다
  6. Groovy가 shebang 행을 건너 뛴 다음 '''':을 긴 문자열 '''의 시작 부분으로 구문 분석하여 모든 쉘 명령을 건너 뛰고 나머지 스크립트를 실행합니다.