실행 가능한 JAR을 래핑하는 쉘 스크립트(Linux/Mac/Cygwin 사용자용)가 있습니다.
Java 프로그램에 매개변수(긴 형식 또는 짧은 형식)를 전달하기 전에 옵션(즉, Java 클래스 경로에 추가해야 하는 디렉터리의 경로와 Java 프로그램에 전달해야 하는 파일 이름)을 전처리해야 합니다.
getopt
getopts
스크립트에 전달된 모든 옵션을 지정하지 않으면 불평합니다. 그러나 전처리해야 할 사항(짧은 형식과 긴 형식)만 지정하고 싶습니다.
대안은 무엇입니까?
참고로, 제가 하려는 작업에 대한 대략적인 설명은 다음과 같습니다.
#!/bin/sh
# extracts _FOLDER_ and _FILE_ from "--changelog"/"-c" option
# I need the add the _FOLDER_ to Java classpath
# and _FILE_ to my program
java -cp .:_FOLDER_:my.jar my.main.class ALL_OTHER_OPTIONS
답변1
모든 옵션을 구문 분석해야 합니다(명령 래핑과 동일한 방식). 그렇지 않으면 경험적 방법을 사용하여 많은 경우 실패할 준비를 해야 합니다.
다음을 작성한다고 가정해 보겠습니다.
#! /bin/sh -
# process options
exec cmd "$@"
매개변수가 있는 , 및 매개변수 없이 , 을 cmd
허용하며 래퍼 는 매개변수가 무엇인지 알고 싶어합니다 .-a
-b
-c
-n
-p
-c
스크립트가 다음과 같이 호출되는 경우:
wrapper.sh -npc foo
wrapper.sh -b -c -n -ca-c
wrapper.sh -- -cx
인수 및 do 를 -c
알고 받아들이지 않는 -n
한 인수가 무엇인지 알 수 없습니다 .-p
-a
-b
경험적 방법을 사용할 수 있습니다. -
다음으로 시작하는 매개변수를 찾은 c
다음 그 뒤에 오는 내용을 살펴보세요. 그러나 이는 위의 모든 예에서 실패합니다(발생하고 인수를 허용하지 않는 첫 번째 예는 제외 -n
) -p
.