Linux(*BSD)などを使用していて、Javaプログラムとシェルスクリプトとの連携を取るため
Javaプログラムの終了コード(終了ステータス)を取得したい場合があると思います。
このような場合は、System.exitを使えば簡単に実現することができます。
以下にサンプルソースと実行例をいくつか紹介します。
System.exitを使用すれば、シェルスクリプトに終了ステータス(終了コード)を返却することができます。
ただし、返却する値によっては意図しない値が返却されますので、意図しない値が返却される実行例も記します。
4つのサンプルソースを用意しました。
返却する値が違うだけです。
class ExitCode0 { public static void main(String[] args) { int exitcode = 0; System.out.println("exitcode: " + exitcode); System.exit(exitcode); } }
class ExitCode1 { public static void main(String[] args) { int exitcode = 1; System.out.println("exitcode: " + exitcode); System.exit(exitcode); } }
class ExitCode256 { public static void main(String[] args) { int exitcode = 256; System.out.println("exitcode: " + exitcode); System.exit(exitcode); } }
class ExitCodeMinus1 { public static void main(String[] args) { int exitcode = -1; System.out.println("exitcode: " + exitcode); System.exit(exitcode); } }
コンパイルして実行した時の出力です。
$ javac ExitCode*.java
$ java ExitCode0 exitcode: 0 $ echo $? 0
$ java ExitCode1 exitcode: 1 $ echo $? 1
$ java ExitCode256 exitcode: 256 $ echo $? 0
$ java ExitCodeMinus1 exitcode: -1 $ echo $? 255
上記の出力からわかるように、シェルの$?で最後に実行したコマンドの終了コードを表示します。
しかし、256, -1は意図した値になっていません。
これは、シェルでは1バイト(char)として扱っているためだと思われます。
終了コードの値には気をつけてシェルスクリプトとの連携を行ってください。
以上、シェル(シェルスクリプト)にJavaで作成したプログラムの終了コード(終了ステータス)を返却する方法でした。