いくつかの簡単なフラグを使用して実行スクリプトを作成しようとしています。/bin/sh
#!/bin/sh
set -eux
if [ "$DEBUG" = "true" ]; then
debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=$SUSPEND,address=$DEBUG_PORT"
else
debug=''
fi
serv="--server.port=${SERVER_PORT}"
prop="--spring.profiles.active=${PROFILES}"
all="${serv:-} ${prop:-}"
java "${debug:-}"-jar /opt/someJar.jar "${all:-}"
今、私たちは説明できず、なぜそのようなことが起こるのか私たちが見つけることができないいくつかの問題を見つけました。
"${debug:-}"-jar
席がないので参考にしてください。スペースを入れると、「javaはメインクラスを見つけるかロードできません」というメッセージでアプリケーションがクラッシュします。スペースを削除すると、期待どおりに機能します。- 2つの変数
serv
とprop
。これら2つをjavaコマンドの最後に入れると、"${serv:-}" "${prop:-}"
これら2つのパラメータはアプリケーションから別々に渡されます。しかし、"${all:-}"
Javaの例外から増やすと、これら2つが互いに接続されていることがわかります。
Caused by: java.lang.NumberFormatException: For input string: "1234--spring.profiles.active=some-profile"
でもset -eux
印刷されるから
+ java -jar /opt/someJar.jar --server.port=1234 --spring.profiles.active=some-profile
それが私が本当に欲しいものです。
何らかの理由で十分な情報を提供できない場合は、追加情報を提供できます。私が達成しようとしているのは、これがなぜこれを行うのか、そして/bin/sh
そのような単純なスクリプトでそれを使用する方法を理解することです。
ベストアンサー1
Stéphaneは$@
これを通常のシェルで配列として使用すると述べました。 1つの方法は次のとおりです。
#!/bin/sh
set -eux
set -- # clear cmdline params
if [ "$DEBUG" = "true" ]; then
set -- "-Xdebug" "-Xrunjdwp:transport=dt_socket,server=y,suspend=$SUSPEND,address=$DEBUG_PORT"
fi
# specify the jar file
set -- "$@" -jar /opt/someJar.jar
# add the port and profile
set -- "$@" "--server.port=${SERVER_PORT}"
set -- "$@" "--spring.profiles.active=${PROFILES}"
# and run it
java "$@"