-1

私はシェルスクリプトの初心者です。以下はシェルスクリプトです:

$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 は、行末の改行をエスケープするエスケープ文字です。通常、シェル プログラムでは、行末の改行によって、コマンドの実行が完了し、現在解釈できることをシェルに伝えます。で行を終了する\と、コマンドが実際には次の行に続くことをシェルに伝えます。つまり、これはすべて 1 つのコマンドです。

-Dpid=myJava— 値 myJava を持つ pid という名前の 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}— 値が ${CFG_FILE} の config という名前の JRE のシステム プロパティを設定します。

-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 のシステム プロパティを value で設定しますfile:///${my_config}/log4j.properties.ewf.rt

com.test.MyJava本質的にクラスパス上にあるJavaクラスでcom/test/MyJava.classあり、おそらくmain機能を持っています。JRE が以前のすべての構成セットで初期化された後、このクラスを実行し、そのメイン関数を実行します。

&このコマンドを独自のプロセスで実行し、cli がユーザーに制御を戻す前にコマンドが戻るのを待たないように OS に指示します。基本的に、シェルを実行しているプロセスとは別のプロセスでこのプログラムを実行するようにOSに指示しています。

于 2012-08-20T15:03:21.253 に答える
1

シェルが進むにつれて、そこには本質的に複雑なものは何もありません。ただし、非常に多くの同じ種類のものが何度も繰り返されています。

最高レベルでは、これは単一のコマンドです。行末のバックスラッシュは、次の行の情報でコマンドを継続します。$JAVA_HOME/binディレクトリにあるJVM(JRE、Javaランタイム環境の主要コンポーネントであるJava仮想マシン)を呼び出します。ここ$JAVA_HOMEで、シェル変数です。実際、それは環境変数であるべきです。JVM は 10 個の引数で呼び出され (私が数え間違えた場合を除きます)、バックグラウンドで実行されます (&最後の です)。つまり、シェル スクリプトは JVM を起動し、それが完了するまで待機しません。

一部の引数にはシェル変数の展開形式も含まれており、その一部は環境変数である可能性があります (変数を見ただけでは、どの変数が環境変数であるかを明確に判断することはできませんが、慣習的に、環境変数は のようにすべて大文字です$JAVA_HOME)。代替表記法${HEAP_MAX}は、変数HEAP_MAXを展開するのと同じように展開します$HEAP_MAX。ただし、その引数では、(賢明に)次のように書くことはできません。

-Xmx$HEAP_MAXm   # Wrong (in this context)

それは変数を探すからです$HEAP_MAXm。中かっこを使用して、変数の名前を区切ります。${JAVA_HOME:?}が設定されていない場合$JAVA_HOME、エラー メッセージを生成してスクリプトを停止するなど、中かっこ内の名前を使用してできることは他にもたくさんあります。「パラメータ拡張」のマニュアルを参照してください。

JVM への引数の意味については、man ページを参照する必要があります。ただし、シェルでの演習として、他の引数はすべて、すでに説明したもののバリエーションであり、さまざまな変数を使用して、JVM または実行中のプログラムが必要とするファイルの場所を識別します。

于 2012-08-20T15:01:55.017 に答える
1

Unixベースのシステムを使用していると仮定して、これをチェックしてください:

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

これは複雑なので、最初にシェル スクリプトの基本を学ぶ必要があるかもしれません。

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

于 2012-08-20T14:48:28.060 に答える