./ run.sh:
1. cp=warmonger-1.0.0.jar
2. cmmd="java -server -D64 -Xms200m -Xmx200m
-Dlog4j.configurationFile=$WARMONGER_HOME/etc/log4j2.xml
-classpath $cp warmonger.agent.WarmongerAgentApp"
3. echo $cmmd
执行结果:
dataq.agent.DataqAgentApp -Xmx200m
-Dlog4j.configurationFile=/warmonger/etc/log4j2.xml
-classpath warmonger-1.0.0.jar
“ warmonger.agent.WarmongerAgentApp”没有出现。
我的意思是,如果删除echo,java将引发异常:找不到主类
答案 0 :(得分:0)
$cp
不会显示echo $cmmd
,因为外壳程序将cp
参数(warmonger-1.0.0.jar
)的值替换为{{1} }。
您可以转义美元符号,如果不希望外壳扩展参数,则可以使用单引号。
答案 1 :(得分:0)
您的外壳程序脚本以CR-LF终止(DOS / Windows行尾)。因此,从bash
的角度来看,cp
变量包含warmonger-1.0.0.jar<CR>
(请注意尾随<CR>
)。
当您echo
变量的内容cp
时,也将回显<CR>
,这会将光标置于行的开头(CR =回车)。 echo
然后在行首打印其余参数。
您可以在输出中看到它:
解决方案:将DOS / Windows文本文件转换为UNIX。参见this answer。