タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【シェルスクリプト】Javaクラスの実行結果を取得する方法

Linuxのシェルスプリプトでは、Javaの実行結果(System.exit)の値を取得できることが今回、わかりました。

以前に作成した「Test.jarファイル」を使用して、クラスの実行結果を取得するシェルスプリプトを書いてみました。

tigertaizo.hatenablog.com

サンプル・コード

/home/tigertaizo/Test.sh

vim /home/tigertaizo/Test.sh

#!/bin/bash

PGM_NAME=Test01
java tigertaizo.$PGM_NAME
RETURN_CODE=$?
echo $RETURN_CODE
if [ $RETURN_CODE = 0 ]; then
   echo "${PGM_NAME}-正常終了"
else
   echo "${PGM_NAME}-異常終了"
fi

作成しましたら、実行権限を付加します。

$ chmod +x Test.sh

実行結果

(1) PGM_NAME=Test01

$ ./Test.sh
run Test01#main.
Test01は、正常終了しました。
0
Test01-正常終了

(2) PGM_NAME=Test02

$ ./Test.sh
run Test02#main.
Test02は、異常終了しました。
1
Test02-異常終了

(3) PGM_NAME=Test03

guavaがクラスパスに通っている場合
$ ./Test.sh
run Test03#main.
文字列sは、null または 空白です。
0
Test03-正常終了
guavaがクラスパスに通っていない場合
$ ./Test.sh
run Test03#main.
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Strings
        at tigertaizo.Test03.main(Test03.java:9)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Strings
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more
1
Test03-異常終了

(4) PGM_NAME=Test04

$ ./Test.sh
run Test04#main.
Exception in thread "main" java.lang.NullPointerException
        at tigertaizo.Test04.main(Test04.java:6)
1
Test04-異常終了

基本的なことなんでしょうが、シェルからJavaの実行結果を取得できることで、実現できることの幅が広がるように感じました。