Пустая переменная bash съедает начало следующей? - PullRequest
0 голосов
/ 15 октября 2019

Недавно я редактировал скрипт запуска, чтобы добавить флаги командной строки в программу 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, о котором я не знал, а также не смог найти никакой документации. Что здесь происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...