我可以在 Haskell 中做这样的事情:
#!/usr/bin/runghc
main=putStrLn "Hello World"
然后我可以用./hello.hs
运行它
我的问题是,为什么第一行被忽略了? haskell 中的注释以 --
开头,但第一行似乎仍被忽略。它甚至加载在 ghci 中。该技巧也适用于 Python 和 Perl。
但是当我在 Java 中做类似的事情时:
#!/usr/local/jdk1.6.0_13/bin/javac
...
Javac 给我一个编译器错误。
那么它是如何工作的以及我如何让它与 Java 一起工作?
谢谢。
最佳答案
#!名为“shebang”,是一种 Unix 脚本执行方式。当你要求操作系统执行一个文件时,它会发现这不是一个普通的 .exe 文件,#!在开始时 作为一个神奇的标记,它指示操作系统执行 #! 之后的命令。并连接该命令,使该文件成为该命令的参数
如果 myfile.py 包含
#!/usr/bin/python
执行那个文件和运行没有太大区别
$ /usr/bin/python myfile.py
我的 Haskell 知识很差。但是对于您的特定情况,似乎是 runghc 命令 简单地读取第一行,解析在 #! 上给出的任何参数。行,将文件的其余部分写入临时文件并在该临时文件上运行 ghc(这将删除第一个留置权 - 有关更多信息,请参阅 ghc 源中的 runghc.hs。)
如果您想用 javac 做同样的事情,您可以使用与 runghc 相同的方法。 编写一个包装器,它吃掉文件的第一行,将文件的其余部分写入临时文件并在该文件上运行 javac。
关于linux - 文件开头的 #!/usr/bin/... 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1122778/