2

Mac OS X 10.8.2 を使用しています

jarファイルを実行する単純なbashスクリプトがあります(ウィンドウ付きの単純なHello World GUIプログラム)

#!/bin/sh

if ls /Applications/javahello.jar >& /dev/null ; then
    echo "File exists."
     java -jar /Applications/javahello.jar
     exit 0 
else
     echo "File doesn't exist."
     exit 1
fi

問題は、スクリプトが jar を実行し、ウィンドウがポップアップし、ターミナル ウィンドウが File Exists メッセージで「占有」されたままになることです。実行が終了することはありません。...Javaプログラムをより正確に手動で終了するまで

Java プログラムの実行が完了するのを待たずにスクリプトが終了するように、この bash スクリプトで Java プログラムを実行できるようにする必要があります。

これは、jar ファイルを /Applications/ フォルダーにコピーするインストーラー パッケージの最後に発生します。そのままでは、インストーラーは終了せず、明らかにシェル スクリプトが実行を終了するのを待っています。

4

1 に答える 1

3

javaプロセスをバックグラウンドに置くだけ&です。

#!/bin/sh
if ls /Applications/javahello.jar >& /dev/null ; then
  echo "File exists."
  java -jar /Applications/javahello.jar &
  exit 0 
else
  echo "File doesn't exist."
  exit 1
fi

また、lsファイルが存在するかどうかを確認する必要はありません。

#!/bin/sh
if [ -f /Applications/javahello.jar ]; then
  echo "File exists."
  java -jar /Applications/javahello.jar &
  exit 0 
else
  echo "File doesn't exist."
  exit 1
fi

また、ファイル名を2回使用しているため、スクリプトを編集してファイル名を変更したり、コピーを作成して別のjarファイルを実行したりすると、2つのファイル名が異なる場所でタイプミスが発生する可能性があります。シェルパラメータはそれを修正するので、それは起こり得ません:

#!/bin/sh
jar=/Applications/javahello.jar
if [ -f "$jar" ]; then
  echo "File exists."
  java -jar "$jar" &
  exit 0 
else
  echo "File doesn't exist."
  exit 1
fi
于 2012-11-19T22:21:33.753 に答える