我可以做这样的事情在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?

谢谢。

有帮助吗?

解决方案

#!被命名为"家当"而是一个Unix的方式执行的脚本。当你问的操作系统,以执行一个文件,它将图,这不是一个正常的。执行文件,而#!在开始 作为一个神奇的标记指示操作系统执行命令后#!和布了命令所以这个文件将成为一个参数的命令

如果myfile.py 包含

#!/usr/bin/python

执行该文件是不是很不同的运行

$ /usr/bin/python myfile.py

我Haskell知识是穷人。但是为你的特定情况下似乎runghc命令 简单地读取第一线,分析任何上给出的参数,#!行了,写文件的其余部分的临时文件和运行ghc上,临时文件(该文件将具有先留置权剥离出来-看到runghc.hs在ghc来源的更多的信息。)

如果你想做同样的事情与javac你可以用同样的方法作为runghc.写一个包装,那吃的第一线的文件,写文件的其余部分到一个临时文件和运行javac在该文件。

其他提示

如果你的文件是啰。hs,而第一线"#!/usr/bin/runghc",然后壳会执行:

/usr/bin/runghc hello.hs

第一线基本上告诉壳使用什么运行的脚本。

作为java例如第一线应对可执行, 运行 剧本,不是 汇编 脚本。

我的问题是,为什么是第一线的忽视?意见在haskell开始--但是第一线似乎仍然被忽略。它甚至载ghci.的伎俩还与Python和Perl。

'把戏的作品在Python和Perl因为 # 开始一个评论中这些语言,以解释认为该行为的评论,而忽略它。因此,对于他们,这是没有什么特别的。

在Haskell, # 不开始一个评论,因此它通常不会的工作。然而,GHC(或许还有其它的实现,如果我没记错的话,拥抱做的太)具有一种特殊的情况下为家当行。如果第一线的一个文件开始的 #!, 它被视作一评论。这种偏离的语言规范已被纳入到底要做

$ chmod +x hello.hs
$ ./hello.hs

的工作。它不起作用 javac 因为没有特殊情况下建成对于家当行。

该命令只适用于解释的语言。...这通常意味着没有一个编译器,这将差错出在大多数情况下

原因,这一工作是因为蟒蛇、Perl,显然Haskell,所有解释的语言。这是标准的Unix方式指派口译员,将运行该脚本。Java是编制语言,并且不能够运行一个解释。

Javac是一个编译器,不翻译。

它缺乏互动的模式,我相信是什么导致的"魔法".同样不会的工作与海湾合作委员会,因为它缺少同样的功能。

dmd(D compiler)例如,是一个例子的一个编译器,支持interpertation有这样的互动式编辑(#!/usr/bin/dmd的运行)。

它的位置的可执行的计算机上解释你的脚本。Java是编制语言,因此它不需要这样的声明。

此外,本的一点是,它是一个特殊的意见,该建筑在Java不会是合法的,在这样一个#不是一个法律意见的标记。如果一个建筑就像,将是有意义的...它不...它看起来像:

//!/usr/local/jdk1.6.0_13/bin/javac

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top