Недавно я редактировал скрипт запуска, чтобы добавить флаги командной строки в программу Java, если скрипт bash был запущен с присутствующей переменной среды.
Соответствующая часть:
ACTIVE_HEAPDUMP=""
if [ "$ENABLE_HEAPDUMP" == "true" ]; then
echo 'Heapdump enabled'
ACTIVE_HEAPDUMP="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/solr-4.8.0"
else
echo 'Heapdump NOT enabled'
ACTIVE_HEAPDUMP=""
fi
С этой командой запуска все работает, как и ожидалось:
$JAVA $SOLR_START_OPTS $ACTIVE_HEAPDUMP $SOLR_ADDL_ARGS -XX:OnOutOfMemoryError="$SOLR_TIP/bin/oom_solr.sh $SOLR_PORT" -jar start.jar
Однако с этой командой запуска происходит сбой:
$JAVA $SOLR_START_OPTS $SOLR_ADDL_ARGS $ACTIVE_HEAPDUMP -XX:OnOutOfMemoryError="$SOLR_TIP/bin/oom_solr.sh $SOLR_PORT" -jar start.jar
Разница в расположении $ACTIVE_HEAPDUMP
. Рабочая версия имеет до $SOLR_ADDL_ARGS
, неработающая версия имеет после , что.
$SOLR_ADDL_ARGS
пусто.
Сообщение об ошибке:
Нераспознанная опция виртуальной машины 'HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = ...' Вы имели в виду '(+/-) HeapDumpOnOutOfMemoryError'?
AsВы видите, проблема в том, что начальный -XX:+
ушел. Просто больше там нет.
Это поведение bash, о котором я не знал, а также не смог найти никакой документации. Что здесь происходит?