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?

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.