Shell 脚本末尾有 jar 文件
Shell script with jar file at the end
我下载了一个archive file。在存档中将有一个具有 .sh
的文件。延期。当我用 VI 打开该文件时,我在文件的开头发现了以下代码:
#!/bin/sh
MYSELF=`which "[=11=]" 2>/dev/null`
[ $? -gt 0 -a -f "[=11=]" ] && MYSELF="./[=11=]"
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。
谁能给我解释一下这是怎么回事?你怎么能创建这样的文件?
如果提取 tar 文件后的文件是 start-superbeam.sh 尝试 chmod +x start-superbeam.sh && ./start-superbeam.sh
或 /bin/sh ./start-superbeam.sh
。
如果程序有参数,请在最后提供它们。它将 运行 java 放在最后的 superbeam.sh 作为 jar 文件。
如果您需要特殊的 java 参数设置,例如内存大小,您可以在环境变量 java_args
.
中设置它们
至于发生了什么,这是一个 shell 脚本,在 exit
之后的末尾有一个 jar 文件。引用自ReallyExecutable Jars:
There has long been a hack known in some circles, but not widely
known, to make jars really executable, in the chmod +x sense. The hack
takes advantage of the fact that jar files are zip files, and zip
files allow arbitrary cruft to be prepended to the zip file itself
(this is how self-extracting zip files work).
至于如何创建,请参阅已接受的答案或link。
自己尝试以下命令。开始创建包含任何内容的普通 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 会跳过任何内容,直到他们自己header。此外,调用 "exec" 的行中的 shell 脚本 "ends" (因为此时 shell 解释器已被 exec 行中的命令替换)。
但是,此技巧基于 jar/unzip 可能超出标准的行为。请注意,例如,此语句失败(没有效果):
jar -xf mytrick.jar
我下载了一个archive file。在存档中将有一个具有 .sh
的文件。延期。当我用 VI 打开该文件时,我在文件的开头发现了以下代码:
#!/bin/sh
MYSELF=`which "[=11=]" 2>/dev/null`
[ $? -gt 0 -a -f "[=11=]" ] && MYSELF="./[=11=]"
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。
谁能给我解释一下这是怎么回事?你怎么能创建这样的文件?
如果提取 tar 文件后的文件是 start-superbeam.sh 尝试 chmod +x start-superbeam.sh && ./start-superbeam.sh
或 /bin/sh ./start-superbeam.sh
。
如果程序有参数,请在最后提供它们。它将 运行 java 放在最后的 superbeam.sh 作为 jar 文件。
如果您需要特殊的 java 参数设置,例如内存大小,您可以在环境变量 java_args
.
至于发生了什么,这是一个 shell 脚本,在 exit
之后的末尾有一个 jar 文件。引用自ReallyExecutable Jars:
There has long been a hack known in some circles, but not widely known, to make jars really executable, in the chmod +x sense. The hack takes advantage of the fact that jar files are zip files, and zip files allow arbitrary cruft to be prepended to the zip file itself (this is how self-extracting zip files work).
至于如何创建,请参阅已接受的答案或link。
自己尝试以下命令。开始创建包含任何内容的普通 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 会跳过任何内容,直到他们自己header。此外,调用 "exec" 的行中的 shell 脚本 "ends" (因为此时 shell 解释器已被 exec 行中的命令替换)。
但是,此技巧基于 jar/unzip 可能超出标准的行为。请注意,例如,此语句失败(没有效果):
jar -xf mytrick.jar