Я переживаю странную проблему последние пару дней при написании сценария оболочки, который выполняет Java (начиная с JBoss AS). У меня есть переменная JAVA_OPTS, которую я создаю, и, наконец, переходя к команде «java». Когда я жестко кодирую значения в JAVA_OPTS, а не используя расширение переменной, процесс java выполняется нормально. Когда я использую расширение переменной, я получаю ошибки из исполняемого файла java. Вот соответствующие части сценария:Расширение переменной Bash приводит к разрыву командной строки Java
SERVER="-server"
MEM_OPTS="-Xms512m -Xmx1024m"
case "$1" in
start)
java "$SERVER" "$MEM_OPTS" $JAVA_OPTS \
-classpath "${JBOSS_CLASSPATH}" \
-Dorg.jboss.resolver.warning=true \
-Dsun.rmi.dgc.client.gcInterval=3600000 \
-Dsun.rmi.dgc.server.gcInterval=3600000 \
-Djboss.server.name=${SERVICE_NAME} \
-Djboss.server.base.dir=`dirname ${EC_APP_HOME}` \
-Djboss.server.base.url=file://`dirname ${EC_APP_HOME}` \
-Djboss.server.home.dir=${EC_APP_HOME} \
-Djboss.server.home.url=file://${EC_APP_HOME} \
org.jboss.Main >> out.log 2>&1 &
Выполнение этого дает следующее:
Invalid initial heap size: -Xms512m -Xmx1024m
Could not create the Java virtual machine.
Однако, когда я удалить расширение переменной следующим образом:
java "$SERVER" -Xms512m -Xmx1024m $JAVA_OPTS \
Java не выполняет никаких проблем , В стороне, когда я включаю «-сервер» в MEM_OPTS var, я получаю сообщение об ошибке «непризнанная опция».
Очевидно, что есть что-то с переменным расширением. У меня есть hexdump'd сценарий, и убедитесь, что в строке нет лишних символов, и подтвердил, что использую окончания строки Unix. Я также воспроизвел проблему на двух разных Linux-машинах, хотя оба они работают с одной и той же версией ubuntu (один 32-битный, другой 64-битный).
EDIT: Я получаю тот же результат со всеми формами подстановки переменных: $ MEM_OPTS, $ {MEM_OPTS}, "$ {MEM_OPTS}"
Любые идеи?
попробуйте eval java ....? – ghostdog74
Какая версия Bash? –