本文介紹了如何構(gòu)建可執(zhí)行JAR以將字符串返回到外殼腳本的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我必須從外殼腳本運(yùn)行可執(zhí)行JAR文件才能獲得字符串值。可執(zhí)行JAR不能返回值,因?yàn)镸ain返回空。我無(wú)法使用System.exit(Int),因?yàn)镴AR必須返回字符串類型的值。
請(qǐng)?zhí)岢鼋ㄗh。
推薦答案
此數(shù)據(jù)應(yīng)寫(xiě)入標(biāo)準(zhǔn)輸出(在JAVA中為System.out
),并使用$(command expansion)
捕獲。
以下是所有優(yōu)秀的Unix公民(以及太少的Java程序)應(yīng)該確保做的事情:
將程序結(jié)果寫(xiě)入標(biāo)準(zhǔn)輸出(System.out)
將錯(cuò)誤消息和調(diào)試寫(xiě)入stderr(System.err)
使用System.exit(0)
表示成功(如果未使用System.exit,這也是默認(rèn)設(shè)置)
使用System.exit(1)
(或更高,最多255)表示失敗
這里有一個(gè)完整的示例來(lái)演示Java和外殼腳本之間的相互作用:
$ cat Foo.java
class Foo {
public static void main(String[] args) {
System.out.println("This data should be captured");
System.err.println("This is other unrelated data.");
System.exit(0);
}
}
一個(gè)非常基本的清單:
$ cat manifest
Main-Class: Foo
一個(gè)簡(jiǎn)單的外殼腳本:
#!/bin/sh
if var=$(java -jar foo.jar)
then
echo "The program exited with success."
echo "Here's what it said: $var"
else
echo "The program failed with System.exit($?)"
echo "Look at the errors above. The failing output was: $var"
fi
現(xiàn)在讓我們編譯和構(gòu)建JAR,并使腳本可執(zhí)行:
$ javac Foo.java
$ jar cfm foo.jar manifest Foo.class
$ chmod +x myscript
現(xiàn)在運(yùn)行它:
$ ./myscript
This is other unrelated data.
The program exited with success.
Here's what it said: This data should be captured
這篇關(guān)于如何構(gòu)建可執(zhí)行JAR以將字符串返回到外殼腳本的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,