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