2015-06-21 17 views
6

Download un archive file. Nell'archivio ci sarà un file che ha un .sh. estensione. Quando ho aperto il file con VI Ho trovato il codice qui sotto nella all'inizio del file:Script di shell con file jar alla fine

#!/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 "[email protected]" 
exit 1 

posso correre il vaso facendo java -jar file o `./file'.

Qualcuno può spiegarmi cosa sta succedendo? Come puoi creare questo tipo di file?

+1

Hmm, sono sorpreso che funzioni. Ho pensato che un file JAR fosse solo un file ZIP con un'estensione diversa e che un ZIP debba iniziare con una particolare intestazione. Puoi dare un link per il download? – Thomas

+0

Qual è l'output del comando 'file '? –

+0

@EugeniuRosca stampa i dati.Ho aggiunto un collegamento al file se vuoi testarlo – Hunsu

risposta

3

Provate da soli i seguenti comandi. Inizia a creare un normale file jar con qualsiasi contenuto o usa qualcuno che hai. Io il nome "myjar.jar"

Successivamente, creare un file "hello.sh" con i contenuti:

#!/bin/bash 

exec echo hello 

ora, aggiungere questo file all'avvio di un nuovo file jar:

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

infine, la parte interessante, tipo:

./mytrick.jar 
jar -tf mytrick.jar 
unzip mytrick.jar 

in altre parole, di solito vaso/decompressione salta contenuti fino alla loro propria testa ER. Inoltre, uno script di shell "termina" in una riga che chiama "exec" (perché l'interprete di shell è sostituito a questo punto dal comando nella riga exec).

Tuttavia, questo trucco si basa su un comportamento di jar/unzip probabilmente fuori dagli standard. Nota, ad esempio, che questa affermazione fallisce (non ha effetti):

jar -xf mytrick.jar 
3

Se il file dopo l'estrazione del file tar è start-superbeam.sh Prova a fare chmod +x start-superbeam.sh && ./start-superbeam.sh o /bin/sh ./start-superbeam.sh.

Se il programma ha argomenti, fornirli dopo alla fine. Verrà eseguito java su quella superbeam.sh che come file jar alla fine.

Se sono necessari speciali parametri java impostati come per le dimensioni della memoria, è necessario impostarli nella variabile di ambiente java_args.

Per quanto riguarda ciò che sta accadendo questo è uno script di shell con un file jar alla fine di esso dopo lo exit. Per citare ReallyExecutable Jars:

C'è stato a lungo un hack nota in alcuni ambienti, ma non ampiamente noto, per rendere davvero vasetti eseguibile, in chmod + x senso. L'attacco sfrutta il fatto che i file jar sono file zip e i file zip consentono di anteporre il file arbitrario al file zip stesso (questo è il modo in cui funzionano i file zip autoestraenti).

Quanto a come creare, vedere la risposta accettata o il collegamento.

+0

Avrei accettato la tua risposta se avessi aggiunto i dettagli che sono indicati nell'articolo che linki. – Hunsu

Problemi correlati