2010-07-15 3 views
4

shebang 라인에 인터프리터 옵션을 포함시키기 위해 허용되는 이동 가능한 방법은 무엇입니까? 어떻게우분투의 셰 배너 라인 구문 분석 문제

#!/usr/bin/env python -c 

또는

#!/usr/bin/env java -cp "./jars/*:./src" -Xmn1G -Xms1G -server 

같은 (더 중요한) 뭔가 제대로 구문 분석에 도착 뭔가를 할 수 있습니까? 지금 우분투는 다른 시스템이 아무런 문제없이 이것을 해석 할지라도 모든 것을 함께 glom하는 것 같습니다.

http://en.wikipedia.org/wiki/Shebang_%28Unix%29

문제를 설명하지만 솔루션을 제공합니다.

+5

Java 용으로 왜 필요합니까? 클래스 나 jar 파일에 넣을 수 없으며 java로 실행 가능한 파일은 없습니다. 난 당신이 전체적인 문제를 설명하는 것이 좋습니다 더 나은 해결책이있을 수도 있습니다 – unbeli

+0

자바 가상 머신을 사용하는 자바보다 다른 언어가 있습니다. 나는 clojure에서 스크립팅을 시도하고 있는데, 이런 일을하는 것이 좋습니다. –

+0

무엇을 하시겠습니까? './Main.java'를 실행하면 자바 소스 파일을 컴파일하고 실행할 것인가? 그렇다면'javac'가 처음부터 빠져 있습니다. 아니면'.class' 파일의 맨 위에 붙여 넣기를하고'./Main.class? '를할까요? 그렇다면 http://stackoverflow.com/questions/1667830/running-a-jar-file-without-directly-calling-java가 답입니다. 또한보십시오 : http://stackoverflow.com/questions/4303128/how-to-use-multiple-arguments-with-a-shebang-ie –

답변

3

다른 유닉스가 다중 단어 #을 처리하므로 좋은 해결책이 없습니다! 다르게 라인. 휴대용 #! use는 #!에있는 인터프리터에 대한 최대 하나의 인수를 제한합니다. 인터프리터 나 인수에 공백이 없어야합니다.

언어에서 허용하는 경우 스크립트를 쉘 스크립트로 만들면 인터프리터를 원하는 명령 줄과 함께 로딩 할 수 있습니다. 예를 들어, 펄, 펄 가이드에서 :

#!/bin/sh -- # -*- perl -*- -p 
eval 'exec perl -wS "$0" ${1+"[email protected]"}' 
if $running_under_some_shell; 

쉘 두번째 라인 이후의 처리를 중지하고 Perl은 아무것도하지 않는 명령으로 선 2-3를 본다. 일부 혀짤배기/기법의 방언, #! ... !# 의견을 당신이 일반적으로

#!/bin/sh 
exec guile -s "$0" "[email protected]" 
!# ;; scheme code starts here 

쓸 수있는 유일한 솔루션은 두 개의 파일을 포함한다. #!/usr/bin/env mywrapper을 쓸 수 있습니다. 은 원하는 모든 인수로 실제 해석기를 호출하는 프로그램 (스크립트 일 수 있음)입니다. 또는 실행 파일 자체를 래퍼 스크립트로 만들고 해석 된 파일을 별도로 유지할 수 있습니다. 두 번째 솔루션은 통역사가 선도적 인 #! 라인을 허용하지 않아도 작동한다는 장점이 있습니다.

+2

그것은 너무 나쁘다 ... 나는 진짜로 shebang 선이보다 적게 다리가다는 것을 생각했다보다는 그것이 얼마나 중요한지 알려주었습니다. 조언 해주셔서 감사합니다 :) –