The .zip file format (upon which the .jar format is based) seems to be robust in the presence of extra data prepended to the file. Thus if you use the cat
command to put a shebang before the zip data in the jar file, and make the file executable, then you can call the jar file like you would call any ordinary shell script.
For example:
(Note that the unzip -l
command is just to illustrate the point. It doesn’t change anything about the .jar and can be omitted when you’re actually doing this process.)
[bloom@cat-in-the-hat ~]$ java -jar tex4ht.jar
xtpipes (2009-01-27-22:19)
Command line options:
java xtpipes [-trace] [-help] [-m] [-E] [-s script_file] [-S script_map]
[-i script_dir] [-o out_file]
[-x...ml2xml_arg...] (-d in_data | in_file)
-m messages printing mode
-E error messages into exception calls
in_data XML data directly into the command line
[bloom@cat-in-the-hat ~]$ cat header.txt
#!/usr/bin/java -jar
[bloom@cat-in-the-hat ~]$ cat header.txt tex4ht.jar > tex4ht_exe.jar
[bloom@cat-in-the-hat ~]$ unzip -l tex4ht_exe.jar
Archive: tex4ht_exe.jar
warning [tex4ht_exe.jar]: 21 extra bytes at beginning or within zipfile
(attempting to process anyway)
Length Date Time Name
--------- ---------- ----- ----
0 2009-07-09 15:48 META-INF/
42 2009-07-09 15:47 META-INF/MANIFEST.MF
0 2009-07-09 15:48 ./
0 2009-07-09 15:48 tex4ht/
2217 2009-07-09 15:48 tex4ht/DbUtilities.class
2086 2009-07-09 15:48 tex4ht/GroupMn.class
6064 2009-07-09 15:48 tex4ht/HtJsml.class
4176 2009-07-09 15:48 tex4ht/HtSpk.class
1551 2009-07-09 15:48 tex4ht/JsmlFilter.class
2001 2009-07-09 15:48 tex4ht/JsmlMathBreak.class
6172 2009-07-09 15:48 tex4ht/OoFilter.class
3449 2009-07-09 15:48 tex4ht/OoUtilities.class
1468 2009-07-09 15:48 tex4ht/OomFilter.class
346 2009-07-09 15:48 xtpipes.class
0 2009-07-09 15:48 xtpipes/
4071 2009-07-09 15:48 xtpipes/FileInfo.class
6904 2009-07-09 15:48 xtpipes/InputObject.class
25906 2009-07-09 15:48 xtpipes/Xtpipes.class
1238 2009-07-09 15:48 xtpipes/Xtpipes$5.class
713 2009-07-09 15:48 xtpipes/Xtpipes$3.class
1533 2009-07-09 15:48 xtpipes/Xtpipes$1.class
709 2009-07-09 15:48 xtpipes/Xtpipes$7.class
1294 2009-07-09 15:48 xtpipes/XtpipesEntityResolver.class
1235 2009-07-09 15:48 xtpipes/Xtpipes$6.class
3367 2009-07-09 15:48 xtpipes/Xtpipes$4.class
709 2009-07-09 15:48 xtpipes/Xtpipes$8.class
1136 2009-07-09 15:48 xtpipes/Xtpipes$2.class
875 2009-07-09 15:48 xtpipes/XtpipesPrintWriter.class
1562 2009-07-09 15:48 xtpipes/XtpipesUni.class
0 2009-07-09 15:48 xtpipes/util/
5720 2009-07-09 15:48 xtpipes/util/ScriptsManager.class
1377 2009-07-09 15:48 xtpipes/util/ScriptsManagerLH.class
--------- -------
87921 32 files
[bloom@cat-in-the-hat ~]$ chmod +x tex4ht_exe.jar
[bloom@cat-in-the-hat ~]$ ./tex4ht_exe.jar
xtpipes (2009-01-27-22:19)
Command line options:
java xtpipes [-trace] [-help] [-m] [-E] [-s script_file] [-S script_map]
[-i script_dir] [-o out_file]
[-x...ml2xml_arg...] (-d in_data | in_file)
-m messages printing mode
-E error messages into exception calls
in_data XML data directly into the command line