実行可能な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
。