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

aar*_*tad 5 java linux bash

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

java -jar theJar.jar

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

./server.jar

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

Sin*_*ion 12

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

  • 是的,就是这样.您可以在Ubuntu 10.10上运行update-binfmts --display,以查看安装的处理程序列表. (5认同)