2010-11-11 35 views
5

我是一個長期的Java的傢伙,知道運行與在罐中的MANIFEST.MF文件中引用主類的JAR的方式很簡單:爲什麼我能夠直接從bash執行JAR?

java -jar theJar.jar

我用這個啓動Fabric3服務器(包含在標準發行版中的bin/server.jar)。我注意到,當我從分發tarball解壓縮它時,它被標記爲可執行文件。一時興起,我想

./server.jar

從我bash命令行(bash 4.1.5版本在Ubuntu 10.10),你瞧,服務器啓動時,如果我輸入了正常java -jar ...命令。 JAR的結構像一個普通的JAR;我在它上面做了一個head,並且前幾個字節中沒有#!命令,所以bash不應該神奇地知道用它啓動Java VM,對吧?或者這個bash版本增加了以正確的清單啓動JAR的能力?查詢頭腦想知道...

回答

12

這可能不是bash的一個特性。如果您運行的是Linux(如您已標記的),你可能有binfmt_misc內核模塊,這確實神奇一點點,當您嘗試執行程序。基本上,這是什麼做的是它擴展了二進制格式的Linux可以從剛剛精靈執行也包括一些用戶定義的格式,只要有足夠的指令來運行它們。

+5

是的,就是這樣。您可以在Ubuntu 10.10上運行update-binfmts --display查看安裝了處理程序的列表。 – kkress 2010-11-11 23:01:45

+0

粗糙,顯然我可以execure從命令行^^ LLVM字節碼。 – SingleNegationElimination 2010-11-11 23:09:05

+0

好的,太棒了!感謝科學。 – aarestad 2010-11-12 23:09:22

相關問題