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 程序

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

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

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

此外,由于您使用了两次文件名,如果您编辑脚本以更改文件名或制作副本以运行不同的 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
于 2012-11-19T22:21:33.753 回答