exécuter le programme emballé dans le fichier sh

0

J'ai téléchargé jgit emballé dans un fichier sh et l'ai exécuté dans mingw. J'ai regardé dans la liste des processus que le processus Java a été démarré juste avec la classe principale et les paramètres

"c:\Program Files\Java\jdk1.6.0_26\bin\java.exe" org.eclipse.jgit.pgm.Main diff master

J'ai vérifié le répertoire en cours de traitement pour la classe principale décompactée, il n'y avait rien! Où est la classe principale située sur le système de fichiers?

misha nesterenko
la source

Réponses:

1

Il définit le chemin de classe sur le chemin du .sh déposer à la ligne 88 du .sh fichier.

this_script=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && this_script="$0"
cp=$this_script

[...]

CLASSPATH="$cp"
export CLASSPATH

Il n'est pas nécessaire de "décompresser" la classe principale.


Il utilise une astuce pour combiner un script shell et les données JAR / ZIP réelles dans un seul fichier: il utilise le fait que le fichier ZIP structure de données centrale est à sa fin. le zip / jar lecteur de fichiers simplement sur le script de shell "données vides" au début.

Souvent, la première chose dans un fichier zip est une entrée zip, qui peut être facilement identifiée par sa signature. Cependant, un fichier zip ne commence pas nécessairement par une entrée zip et n'est pas requis par la spécification zip.

Tant que le code du script shell exit s avant le réel zip / jar les données démarrent, le shell ne se soucie pas non plus des "données parasites" après la partie du fichier du script shell.

Daniel Beck
la source
Processus Java peut directement lire à partir du fichier sh?
misha nesterenko
@mishanesterenko Ce n'est pas un .sh fichier. C'est une combinaison .sh / .jar fichier. Voir ma réponse modifiée.
Daniel Beck