このエントリーをはてなブックマークに追加


シェルに終了コードを渡す方法

Linux(*BSD)などを使用していて、Javaプログラムとシェルスクリプトとの連携を取るため
Javaプログラムの終了コード(終了ステータス)を取得したい場合があると思います。
このような場合は、System.exitを使えば簡単に実現することができます。
以下にサンプルソースと実行例をいくつか紹介します。

System.exitを使う

System.exitを使用すれば、シェルスクリプトに終了ステータス(終了コード)を返却することができます。
ただし、返却する値によっては意図しない値が返却されますので、意図しない値が返却される実行例も記します。

4つのサンプルソースを用意しました。
返却する値が違うだけです。

  • 0を返却
    class ExitCode0 {
        public static void main(String[] args) {
            int exitcode = 0;
            System.out.println("exitcode: " + exitcode);
            System.exit(exitcode);
        }
    }
  • 1を返却
    class ExitCode1 {
        public static void main(String[] args) {
            int exitcode = 1;
            System.out.println("exitcode: " + exitcode);
            System.exit(exitcode);
        }
    }
  • 256を返却
    class ExitCode256 {
        public static void main(String[] args) {
            int exitcode = 256;
            System.out.println("exitcode: " + exitcode);
            System.exit(exitcode);
        }
    }
  • -1を返却
    class ExitCodeMinus1 {
        public static void main(String[] args) {
            int exitcode = -1;
            System.out.println("exitcode: " + exitcode);
            System.exit(exitcode);
        }
    }

実行例

コンパイルして実行した時の出力です。

$ javac ExitCode*.java
  • 0を返却を実行
    $ java ExitCode0
    exitcode: 0
    $ echo $?
    0
  • 1を返却を実行
    $ java ExitCode1 
    exitcode: 1
    $ echo $?
    1
  • 256を返却を実行
    256ではなく、シェルでは0となっています。
    $ java ExitCode256 
    exitcode: 256
    $ echo $?
    0
  • -1を返却を実行
    -1ではなく、シェルでは255となっています。
    $ java ExitCodeMinus1 
    exitcode: -1
    $ echo $?
    255

上記の出力からわかるように、シェルの$?で最後に実行したコマンドの終了コードを表示します。
しかし、256, -1は意図した値になっていません。
これは、シェルでは1バイト(char)として扱っているためだと思われます。
終了コードの値には気をつけてシェルスクリプトとの連携を行ってください。

以上、シェル(シェルスクリプト)にJavaで作成したプログラムの終了コード(終了ステータス)を返却する方法でした。


添付ファイル: fileExitCodeMinus.java 431件 [詳細] fileExitCode256.java 385件 [詳細] fileExitCode1.java 434件 [詳細] fileExitCode0.java 408件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-08 (土) 21:44:01