Clojure 中的多行 shebang?

发布于 2024-10-20 12:50:35 字数 333 浏览 7 评论 0原文

目标:生成一个 Clojure 脚本,该脚本在作为 ./script.clj 运行时运行 -main

我得到的最接近的是

#!/bin/bash
#(comment
exec clj -m `basename $0 .clj` ${1+"$@"}
exit
#)
(defn -main [args]
   (println args))

但是 Clojure 不允许在多行注释中包含非 Lisp 代码,并且 Clojure 没有 Common Lisps 的 #| ... |# 语法。

Goal: produce a Clojure script which runs -main when run as ./script.clj.

The closest I've gotten is

#!/bin/bash
#(comment
exec clj -m `basename $0 .clj` ${1+"$@"}
exit
#)
(defn -main [args]
   (println args))

But Clojure doesn't allow non-Lisp code inside multline comments, and Clojure doesn't have Common Lisps's #| ... |# syntax.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤檠 2024-10-27 12:50:35

语法很晦涩,但它确实有效。来自维基教科书

$ ./hello.clj Fred
Hello Fred!

":";exec clj -m `basename $0 .clj` ${1+"$@"}
":";exit

(ns hello
    (:gen-class))

(defn -main
    [greetee]
    (println (str "Hello " greetee "!")))

The syntax is obscure, but it works. From Wikibooks.

$ ./hello.clj Fred
Hello Fred!

":";exec clj -m `basename $0 .clj` ${1+"$@"}
":";exit

(ns hello
    (:gen-class))

(defn -main
    [greetee]
    (println (str "Hello " greetee "!")))
雪若未夕 2024-10-27 12:50:35

自从 Clojure CLI 可用后,请使用

#! /usr/bin/env clj

(println "Hello World!")

Since Clojure CLI became available, use

#! /usr/bin/env clj

(println "Hello World!")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文