gpt4 book ai didi

shell - OCaml中的多行shebang?

转载 作者:行者123 更新时间:2023-12-02 07:45:06 25 4
gpt4 key购买 nike

简而言之,我想抽象出这个 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!"

最佳答案

您正在寻找的是 shell 和 Objective Caml 多语言(其中 shell 部分调用 ocaml 解释器来执行实际工作)。这里有一个比较简单的。如有必要,适应使用 ocamlscript,虽然我不明白这一点。

#!/bin/sh
"true" = let exec _ _ _ = "-*-ocaml-*- vim:set syntax=ocaml: " in
exec "ocaml" "$0" "$@"
;;
(* OCaml code proper starts here *)
print_endline "hello"

关于shell - OCaml中的多行shebang?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com