- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2017-07-08T21:38:31+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となっています。};
$ java ExitCode256
exitcode: 256
$ echo $?
0
- -1を返却を実行~
&color(red){-1ではなく、シェルスクリプトでは255となっています。};
$ java ExitCodeMinus1
exitcode: -1
$ echo $?
255
上記の出力からわかるように、シェルの$?で最後に実行したコマンドの終了コードを表示します。~
しかし、256, -1は意図した値になっていません。~
これは、シェルでは1バイト(char)として扱っているためだと思われます。~
終了コードの値には気をつけてシェルスクリプトとの連携を行ってください。
以上、シェルスクリプトにJavaで作成したプログラムの終了コード(終了ステータス)を返却する方法でした。