为什么我能够直接从bash执行JAR?
问题描述:
我是一个长期的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的能力?查询头脑想知道...
答
这可能不是bash的一个特性。如果您运行的是Linux(如您已标记的),你可能有binfmt_misc
内核模块,这确实神奇一点点,当您尝试执行程序。基本上,这是什么做的是它扩展了二进制格式的Linux可以从刚刚精灵执行也包括一些用户定义的格式,只要有足够的指令来运行它们。
是的,就是这样。您可以在Ubuntu 10.10上运行update-binfmts --display查看安装了处理程序的列表。 – kkress 2010-11-11 23:01:45
粗糙,显然我可以execure从命令行^^ LLVM字节码。 – SingleNegationElimination 2010-11-11 23:09:05
好的,太棒了!感谢科学。 – aarestad 2010-11-12 23:09:22