shell脚本等待java jar文件完成

时间:2012-11-19 22:16:02

标签: macos bash shell jar

我使用的是Mac OS X 10.8.2

我有一个简单的bash脚本执行一个jar文件(一个带窗口的简单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,弹出一个窗口,终端窗口保持“占用”文件存在消息。它永远不会完成它的执行。 ...直到我更精确地手动终止java程序

我需要能够在这个bash脚本中执行java程序,使脚本退出而不等待java程序完成运行。

这会发生在将jar文件复制到/ Applications /文件夹的安装程序包的末尾......安装程序永远不会完成,显然正在等待shell脚本完成执行。

1 个答案:

答案 0 :(得分:2)

只需将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

另外,由于您使用了两次文件名,如果您编辑脚本以更改文件名或制作副本以运行其他jar文件或其他任何内容,则可能会在两个文件名不同的情况下输入错误。 shell参数将修复它,以便它不会发生:

#!/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