2012-11-19 41 views
2

我在Mac OS X 10.8.2shell腳本等待java的jar文件來完成

我有一個簡單的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,彈出一個窗口,終端窗口保持「佔用」File Exists消息。它永遠不會完成它的執行。 ...直到我更精確地手動終止java程序

我需要能夠在此bash腳本中執行java程序,以便腳本退出而不等待Java程序完成運行。

這會發生在將jar文件複製到/ Applications /文件夾中的安裝程序包的末尾...原樣,安裝程序從不完成,顯然正在等待shell腳本完成其執行。

+0

'Java的罐子/Applications/javahello.jar&'應該在後臺運行Java程序,因此不會等到它完成。 – Anaphory

回答

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 
+0

謝謝!很棒的提示。奇蹟般有效。 – TrekOnTV2017