在Windows中运行的命令行选项,但不适用于Linux

时间:2013-12-17 17:09:08

标签: java linux bash shell rmi

我在Linux上的Windows / shell脚本上有一个.bat文件,它从命令行启动一个大型Java应用程序。它配置类路径,环境变量等。

有一次,它使用RMID来配置一系列将在自己的JVM中运行的服务。问题是它不允许我为Linux上的codebase属性指定多个JAR。它允许我在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%正常,但是,当尝试在Linux中的代码库中设置多个JAR时,它会导致一般性故障并且不执行整个RMID命令。我的shell脚本如下所示:

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,那么shell脚本本身就可以正常工作,但是我得到了一般失败。关于我做错的任何建议?我愿意尝试新事物来解决这个问题,因为到目前为止我的所有尝试都没有结果。

2 个答案:

答案 0 :(得分: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://或绝对文件路径,没有任何先于它,但你必须尝试它。

答案 1 :(得分:1)

你做错了。您根本不需要使用参数和系统属性启动rmid。在您的激活设置程序中注册您要使用的ActivationGroup(s)时,应指定所有这些内容。这反过来意味着所有命令行问题都应该消失。