pur*_*ger 1 java heap size bash
在编写执行Java的shell脚本(启动JBoss AS)时,我在过去几天遇到了一个奇怪的问题.我有一个我正在创建的变量JAVA_OPTS,最后传递给'java'命令.当我在JAVA_OPTS中硬编码值而不是使用变量扩展时,java进程正常执行.当我使用变量扩展时,我从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 &
Run Code Online (Sandbox Code Playgroud)
执行此操作会给出以下内容:
Invalid initial heap size: -Xms512m -Xmx1024m
Could not create the Java virtual machine.
Run Code Online (Sandbox Code Playgroud)
但是,当我删除变量扩展时,如下所示:
java "$SERVER" -Xms512m -Xmx1024m $JAVA_OPTS \
Run Code Online (Sandbox Code Playgroud)
java执行没有问题.顺便说一句,当我在MEM_OPTS var中包含"-server"时,我得到错误"无法识别的选项".
显然,变量扩展存在一些问题.我已经对脚本进行了hexdump,并确保字符串中没有多余的字符,并确认我使用的是Unix行结尾.我也在两台不同的linux机器上重现了这个问题,虽然它们都运行相同版本的ubuntu(一个32位,另一个64位).
编辑:我得到所有形式的变量替换相同的结果:$ MEM_OPTS,$ {MEM_OPTS},"$ {MEM_OPTS}"
有任何想法吗?
当您使用时"$MEM_OPTS",您将-Xms512m -Xmx1024m作为单一选项传递.
试试这个:
java "$SERVER" $MEM_OPTS $JAVA_OPTS \
Run Code Online (Sandbox Code Playgroud)
变量替换和引用的良好指南示例:http://tldp.org/LDP/abs/html/varsubn.html