为什么我能直接从bash执行JAR?

时间:2010-11-11 22:48:26

标签: java linux bash

我是一个长期的Java人员,并且知道使用Jar中MANIFEST.MF文件中引用的主类运行JAR的方法很简单:

java -jar theJar.jar

我正在使用它来启动Fabric3服务器(在其标准发行版中包含在bin/server.jar中)。我注意到当我从分发tarball解压缩它时,它被标记为可执行文件。一时兴起,我试过

./server.jar

来自我的bash命令行(Ubuntu 10.10中的bash版本4.1.5),并且看,服务器启动就像我输入了正常的java -jar ...命令一样。 JAR的结构类似于普通的JAR;我在它上面做了head,前几个字节中没有#!命令,所以bash不应该神奇地知道用它启动Java VM,对吧?或者这个版本的bash是否能够正确启动具有适当清单的JAR?询问心灵想知道......

2 个答案:

答案 0 :(得分:12)

这可能不是bash的特征。如果您正在运行linux(因为已标记),那么当您尝试执行程序时,您可能拥有binfmt_misc内核模块,这会产生一些魔力。基本上它的作用是它扩展了linux可以从elf执行的二进制格式,还包括一些用户定义的格式,并有足够的指令来运行它们。

答案 1 :(得分:2)

这不是增长这种奇怪能力的bash - 它是你的内核,特别是模块binfmt_misc。 (还有一些documentation specific to Java