简而言之,我想抽象出这个 shebang,这样我就可以将它复制并粘贴到其他 .ML 文件中,而不必每次都指定文件名:
#!/usr/bin/env ocamlscript -o hello
print_endline "Hello World!"
我意识到我可以放弃这-o hello
一点,但我希望所有二进制文件都具有 UNIX 名称 ( hello
),而不是 Windows 名称 ( hello.ml.exe
)。
你需要一个复杂的 shebang 来做到这一点。具有所需行为的 Clojure 示例:
":";exec clj -m `basename $0 .clj` $0 ${1+"$@"}
":";exit
Clojure 是基于 Java 的,这就是为什么clj
需要文件的基本名称(something
,而不是something.clj
)。为了获得基本名称,您需要一个多行 shebang,因为单行 shebang 只能处理一个简单的静态命令行参数。为了做多行shebangs,你需要一个同时的语法:
- 向 shell 发送 shell 命令
- 隐藏主要语言的 shell 命令
有谁知道 OCaml 的诡计来做到这一点?我尝试了以下但没有成功:
(*
exec ocamlscript -o `basename $0 .ml` $0 ${1+"$@"}
exit
*)
let rec main = print_endline "Hello World!"