#! называется " shebang " и представляет собой способ выполнения сценариев в Unix. Когда вы попросите ОС выполнить файл, она поймет, что это не обычный файл .exe, а символ #! в начале
служит волшебным маркером, который инструктирует ОС выполнять команду после #! и связать эту команду так, чтобы этот файл стал аргументом этой команды
, если myfile.py содержит
#!/usr/bin/python
выполнение этого файла мало чем отличается от запуска
$ /usr/bin/python myfile.py
Мои знания Хаскелла плохие. Но для вашего конкретного случая, кажется, команда runghc
просто читает первую строку, анализирует любые аргументы, приведенные на этом #! строка, записывает оставшуюся часть файла во временный файл и запускает ghc для этого временного файла (для которого будет удален первый залог; для получения дополнительной информации см. runghc.hs в источниках ghc.)
Если вы хотите сделать то же самое с javac, вы можете использовать тот же подход, что и runghc.
Напишите обертку, которая поедает первую строку файла, записывает оставшуюся часть файла во временный файл и запускает для этого файла javac.