Он устанавливает путь класса к пути к файлу .sh
в строке 88 файла .sh
.
this_script=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && this_script="$0"
cp=$this_script
[...]
CLASSPATH="$cp"
export CLASSPATH
Нет необходимости "распаковывать" основной класс.
Он использует хитрость, чтобы объединить сценарий оболочки и фактические данные JAR/ZIP в одном файле: он использует тот факт, что центральная структура данных файла ZIP находится в его конце. Читатель файла zip
/jar
просто о сценарии оболочки "garbage data" в начале.
Часто первым в zip-файле является zip-запись, которую можно легко идентифицировать по ее подписи. Но это не обязательно тот случай, когда zip-файл начинается с zip-записи и не требуется в спецификации zip.
Пока код сценария оболочки exit
до того, как начнутся фактические данные zip
/jar
, оболочка не заботится о "мусорных данных" после части файла сценария оболочки.