【问题标题】:Multiline shebangs in Clojure?Clojure中的多行shebangs?
【发布时间】:2011-03-08 01:19:06
【问题描述】:

目标:生成一个以./script.clj 运行时运行-main 的Clojure 脚本。

我得到的最接近的是

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

但是 Clojure 不允许在多行 cmets 中使用非 Lisp 代码,而且 Clojure 没有 Common Lisps 的 #| ... |# 语法。

【问题讨论】:

  • 出于好奇,为什么#!/usr/bin/clj -m 不起作用?
  • 仍然看不出这与您最近的问题stackoverflow.com/questions/5224548/… 有何不同,它本身就是stackoverflow.com/questions/973106/… 的副本。布赖恩的非常彻底的回应有什么不适合你的地方吗?
  • 首先,Brian 的反应是完全没有反应。仅仅因为某事不惯用并不意味着它应该被避免。其次,Brian 对多线 shebang 只字未提。
  • 实际上,如果某些东西不是惯用的,则有两种可能性。第一种可能性是你是一个不知名的天才,他发现了一些非常新的和重要的东西,它将改变人们对编程语言的看法。第二个是你错过了一些关键概念,并且正在做适得其反或更糟糕的事情。我会让你猜猜这两个中哪一个更有可能。
  • Shebang 并不新鲜,但它们对于编写带有命令行界面的程序很有用。

标签: clojure multiline main comments shebang


【解决方案1】:

语法晦涩难懂,但确实有效。来自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 "!")))

【讨论】:

  • 我很惊讶 Clojure 作者没有更加努力地使 Clojure 脚本更适合。
  • Clojure 社区是反 POSIX 的。我如何shebang? “不要;使用 clj。”如何手动编译? “不要;使用 Leiningen。”
【解决方案2】:

自从Clojure CLI 可用后,使用

#! /usr/bin/env clj

(println "Hello World!")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2017-08-15
    • 2011-03-17
    • 1970-01-01
    • 2016-07-16
    • 2021-05-02
    相关资源
    最近更新 更多