-1

我是一个新的shell脚本,下面是一个shell脚本:

$JAVA_HOME/bin/java -Dpid=MyJava \
    -Xms${HEAP_MIN}m -Xmx${HEAP_MAX}m -cp ${CPG_CLASSPATH} \
    -Dconfig=${CFG_FILE} \
    -Dcom.test.eps.configpath=${my_config}/ \
    -Dcom.test.eps.rt.config=${my_config}/ \
    -Dlog4j.configuration=file:///${my_config}/log4j.properties.ewf.rt \
    com.test.MyJava &

谁能告诉我上面每一行的代码含义?

4

3 回答 3

4

$JAVA_HOME/bin/java$JAVA_HOME— 调用位于由当前用户环境中设置的变量指定的文件夹的 bin 路径中的 JRE 二进制文件。也就是说,它运行 Java,特别是 JAVA_HOME 指向的版本。

尾随\的 s 是转义字符,在行尾转义换行符。通常在 shell 程序中,行尾的换行符告诉 shell 你已经完成了命令,它现在可以解释它。以 结束一行\告诉 shell 该命令实际上将在下一行继续,即这是一个命令。

-Dpid=myJava— 为名为 pid 且值为 myJava 的 jre 设置系统属性。Java 程序基本上可以getProperty("pid")在运行时询问,它会返回"myJava"然后适当地选择它的行为,这是配置 JRE 运行的程序的一种方式。

-Xms${HEAP_MIN}m— 将 javas 最小堆大小设置为${HEAP_MIN}env var 中的值。堆大小是 jre 留出多少内存来存储其堆栈跟踪。

-Xmx${HEAP_MAX}m— 将 Java 的最大堆大小设置为${HEAP_MAX}env var 中的值。

-cp ${CPG_CLASSPATH}— 将 Java 类路径设置为${CPG_CLASSPATH}env var 中的值。

-Dconfig=${CFG_FILE}— 为名为 config 的 JRE 设置系统属性,其值为 ${CFG_FILE}。

-Dcom.test.eps.configpath=${my_config}/com.test.eps.configpath— 为以 value命名的 JRE 设置系统属性${my_config}

-Dcom.test.eps.rt.config=${my_config}/com.test.eps.rt.config— 为以 value命名的 JRE 设置系统属性${my_config}

-Dlog4j.configuration=file:///${my_config}/log4j.properties.ewf.rt— 为名为 log4j.configuration 的 JRE 设置系统属性,其值为file:///${my_config}/log4j.properties.ewf.rt

com.test.MyJava是一个 Java 类,本质上位于com/test/MyJava.class可能具有main函数的类路径上。在 JRE 使用所有先前的配置集进行初始化后,它将运行这个类并运行它的 main 函数。

&告诉操作系统在它自己的进程中运行这个命令,而不是在 cli 将控制权交还给用户之前等待它返回。它基本上是告诉操作系统在与运行 shell 的进程不同的进程中运行该程序。

于 2012-08-20T15:03:21.253 回答
1

假设您使用的是基于 unix 的系统,请查看以下内容:

http://www.manpagez.com/man/1/java/

这很复杂,所以也许你应该先学习 shell 脚本的基础知识:

http://www.freeos.com/guides/lsst/

于 2012-08-20T14:48:28.060 回答
1

就像 shell 一样,那里没有什么本质上复杂的东西。然而,有很多相同类型的东西一遍又一遍。

在最高级别,它是一个命令。行尾的反斜杠将命令与下一行的信息一起继续。它调用 JVM(Java 虚拟机,它是 JRE 的关键组件,Java 运行时环境)在目录中找到$JAVA_HOME/bin,其中$JAVA_HOME(我相信你认得)是一个 shell 变量;实际上,它应该是一个环境变量。JVM 使用 10 个参数调用(除非我再次计算错误),并在后台运行(&最后是)。这意味着 shell 脚本会启动 JVM 并且不会等待它完成。

一些参数还包含 shell 变量的扩展形式,其中一些可能是环境变量(您不能仅仅通过查看它们就明确地知道哪些变量是环境变量,但通常情况下,环境变量都是大写的,比如$JAVA_HOME)。另一种表示法${HEAP_MAX}扩展了一个变量HEAP_MAX,就像这样$HEAP_MAX做一样。然而,在那个论点中,你不能(明智地)写:

-Xmx$HEAP_MAXm   # Wrong (in this context)

因为那会寻找一个变量$HEAP_MAXm;您使用大括号来分隔变量的名称。您还可以对大括号中的名称执行许多其他操作,例如${JAVA_HOME:?}如果$JAVA_HOME未设置,则生成错误消息并停止脚本。请参阅“参数扩展”手册。

对于 JVM 参数的含义,您需要查看手册页。但是,作为 shell 的一个练习,其他参数都是已经讨论过的内容的变体,使用不同的变量来识别 JVM 或它正在运行的程序所需的文件的位置。

于 2012-08-20T15:01:55.017 回答