I can do something like this in Haskell:
#!/usr/bin/runghc
main=putStrLn "Hello World"
Then I can run it with ./hello.hs
My question is, why is the first line ignored? Comments in haskell start with -- but the first line still seems to be ignored. It even loads in ghci. The trick also works with Python and Perl.
But when I do something similar in Java:
#!/usr/local/jdk1.6.0_13/bin/javac
...
Javac gives me a compiler error.
So how does this work and how would I get it to work with Java?
Thanks.
#! is named “shebang” and is a Unix way of executing scripts. When you ask the OS to execute a file it’ll figure out that this is not a normal .exe file, and the #! at the start
serves as a magic marker which instructs the OS to execute the command after the #! and wiring up that command so this file becomes an argument of that command
if myfile.py contains
executing that file is not very different from running
My Haskell knowledge is poor. But for your particular case it seems the runghc command
simply reads the first line, parses any arguments given on that #! line, writes the rest of the file to a temporary file and runs ghc on that temp file(which will have the first lien stripped out – see runghc.hs in the ghc sources for more info.)
If you wanted to do the same thing with javac you could use the same approach as runghc.
Write a wrapper, that eats the first line of the file, writes the rest of the file to a temp file and runs javac on that file.