Shell脚本与jar文件结束

时间:2015-06-21 18:28:30

标签: java shell jar

我下载archive file。在存档中,将有一个.sh的文件。延期。当我用VI打开该文件时,我在文件的开头找到了以下代码:

#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
java=java
if test -n "$JAVA_HOME"; then
    java="$JAVA_HOME/bin/java"
fi
exec "$java" $java_args -jar $MYSELF "$@"
exit 1

我可以通过执行java -jar file或`./file'。

来运行jar

有人可以解释一下发生了什么吗?你怎么能创建这样的文件?

2 个答案:

答案 0 :(得分:4)

自己尝试以下命令。开始创建包含任何内容的普通jar文件,或者使用您拥有的人。我将它命名为“myjar.jar”

接下来,创建一个包含内容的文件“hello.sh”:

#!/bin/bash

exec echo hello

现在,在新的jar文件的开头添加此文件:

cat hello.sh myjar.jar > mytrick.jar
chmod 700 mytrick.jar

最后,有趣的部分,输入:

./mytrick.jar
jar -tf mytrick.jar
unzip mytrick.jar
换句话说,通常jar / unzip跳过任何内容,直到他们自己的标题。此外,shell脚本在一行中“结束”,调用“exec”(因为shell解释器此时由exec行中的命令替换)。

然而,这个技巧基于jar / unzip的行为可能超出标准。请注意,例如,此语句失败(没有效果):

jar -xf mytrick.jar

答案 1 :(得分:3)

如果解压缩tar文件后的文件是 start-superbeam.sh ,请尝试chmod +x start-superbeam.sh && ./start-superbeam.sh/bin/sh ./start-superbeam.sh

如果程序有参数,请在结束后提供。它将在superbeam.sh上运行java,最后作为jar文件。

如果您需要特殊的java参数设置,例如内存大小,您可以在环境变量java_args中设置它们。

至于发生了什么,这是一个shell脚本,在exit之后的一端有一个jar文件。引用ReallyExecutable Jars

  

长期以来,某些人都知道黑客攻击,但并不广泛   已知,使chars真正可执行,在chmod + x意义上。黑客   利用jar文件是zip文件和zip的事实   文件允许任意cruft被添加到zip文件本身   (这是自解压zip文件的工作原理)。

至于如何创建,请参阅接受的答案或链接。