2013-12-17 2 views
0

У меня есть файл .bat на сценарии Windows/shell в Linux, который запускает большое приложение Java из командной строки. Он настраивает путь к классам, переменные среды и т. Д.Параметры командной строки, работающие в Windows, но не Linux

В какой-то момент он использует RMID для настройки множества сервисов, которые будут запускаться в их собственных JVM. Проблема в том, что он не позволит мне указать несколько JAR для свойства codebase в Linux. Это позволяет мне делать это на Windows просто отлично, но я думаю, что мой синтаксис/стиль не должен быть неправильным для сценария .sh, и я надеюсь, что более опытный пользователь Linux может получить подсказку. В Windows, рабочая линия выглядит следующим образом:

SET RMID_OPTIONS=%RMID_VM% 
    -J-DINSTALL_DIR=%CONFIG_PATH% 
    -C-DINSTALL_DIR=%CONFIG_PATH% 
    -J-DINSTALL_DIR_LOCAL=%HOME_DIR% 
    -C-DINSTALL_DIR_LOCAL=%HOME_DIR% 
    -J-Djava.security.policy=%PL_HOME%\windows\system.policy 

    -C-Djava.rmi.server.codebase= 
     "file:/%HOME_DIR%\jar1.jar file:/%HOME_DIR%\jar2.jar" 

    -J-Djava.rmi.server.codebase= 
     "file:/%HOME_DIR%\jar1.jar file:/%HOME_DIR%\jar2.jar" 
    // more stuff here 

Единственные важные линии являются те, задающими rmi.server.codebase свойства. Вышеупомянутое работает на 100% штрафа, однако при попытке установить несколько JAR в базе кода в Linux это приводит к общему сбою, и вся команда RMID не выполняется. Мой сценарий оболочки выглядит следующим образом:

export RMID_OPTIONS="${RMID_VM} 
    -J-DINSTALL_DIR=${CONFIG_PATH} 
    -C-DINSTALL_DIR=${CONFIG_PATH} 
    -J-DINSTALL_DIR_LOCAL=${HOME_DIR} 
    -C-DINSTALL_DIR_LOCAL=${HOME_DIR} 
    -J-Djava.security.policy=${PL_HOME}/linux/system.policy 
    -C-Djava.rmi.server.codebase= 
     ""file:/${HOME_DIR}/jar1.jar file:/${PL_HOME_LOCAL}/jar2.jar"" 
    -J-Djava.rmi.server.codebase= 
     ""file:/${HOME_DIR}/jar1.jar file:/${PL_HOME_LOCAL}/jar2.jar"" 
    // more stuff here 
    " 

Сама оболочка скрипт работает прекрасно, если указан только один JAR, но больше, и я получаю общую неудачу. Любые предложения о том, что я делаю неправильно? Я открыт, чтобы попробовать новые вещи, чтобы исправить это, поскольку все мои попытки до сих пор были бесплодны.

+1

Определите общий сбой. И почему двойные двойные кавычки? И почему все варианты RMId? Вы указываете те, когда регистрируете активируемые объекты, бот при его запуске. – EJP

+0

По общему отказу я имею в виду, что активируемые объекты не регистрируются и, следовательно, не могут запускаться. Двойные кавычки - это соглашение Linux, которое интерпретирует только специальные символы, когда они определяют переменные, как описано здесь (http://www.serverwatch.com/tutorials/article.php/3898896/Single-vs-Double-Quotes-in-Bash .htm). Я недостаточно знаком с Linux, чтобы узнать, не подходят ли они в этом сценарии. Я был бы открыт для изменения, если вы считаете, что это может быть проблемой. Конкретная ошибка, которую я получаю, это 'rmid: незаконный вариант: file: // home/jar2.jar' (Извините, я думал, что я поставил выше) – Kon

+0

« Общие »ничего не значит. «Сбой» означает сообщение об исключении или ошибке. Вы должны разместить его здесь, в своем вопросе. – EJP

ответ

3

Под Linux ускоряющиеся кавычки выполняются по-разному. Вы пытаетесь использовать специальный синтаксис Windows, который приведет к тому, что файлы jar передаются как отдельные аргументы, а не как один, как и должно быть.

Вместо "" производить цитаты в кавычках, вы должны использовать \" в Linux:

export RMID_OPTIONS="... -C-Djava.rmi.server.codebase=\"file:/${HOME_DIR}/jar1.jar file:/${PL_HOME_LOCAL}/jar2.jar\" ..." 

Помимо этого, я не уверен, что синтаксис file:/ правильно. Вероятно, это либо file://, либо абсолютный путь к файлу без чего-либо предшествующего ему, но вам придется попробовать его.

+0

Благодарим вас за предложения. Тем не менее, я пробовал все, что вы упомянули, и я все еще получаю ошибку Illegal Option от RMID, в частности, отмечая вторую банку. – Kon

+0

Как вы называете 'rmid'? Вероятно, есть проблема; если 'RMID_OPTIONS' оставлен без кавычек, он по-прежнему будет разделен на несколько аргументов без учета встроенных кавычек. –

+0

Я вызываю его в файле сценария .sh после динамического добавления кучи переменных среды.Я проверил, что переменные устанавливаются правильно, и я подтвердил, что открытый текст вызова Linux RMID идентичен открытому тексту вызова Windows RMID, но я все равно получаю ту же ошибку только в Linux. – Kon

1

Вы делаете это неправильно. Вам не нужно начинать rmid с аргументами и свойствами системы вообще. Все эти данные должны быть указаны при регистрации ActivationGroup(s), который вы собираетесь использовать, в вашей программе настройки активации. Это, в свою очередь, означает, что все проблемы с командной строкой должны просто исчезнуть.

Смежные вопросы