我在Windows上使用tcsh的预构建二进制exe。
我在试着写一些clojure脚本。就像这样:
#!/usr/bin/env java clojure.main
(prn "Hello World!\n")首先,我尝试在tcsh中直接运行它:
# cat test
#!/usr/bin/env java clojure.main
(prn "Hello World\n")
# ./test
#没有幸运:一个“选择正确的程序打开这个文件”窗口出现,但没有执行它。
我想在上面加上+x模式:
# chmod +x test
# ls-F -l test
-rwxr-xr-x 1 SW Administ 59 Oct 9 01:25 test*
# ./test仍然一样:(
问题是:
很多Thx :-)
发布于 2012-10-09 04:37:55
我可以建议将您的程序编译为uberjar吗?jar可以按名称执行,就像执行包装器脚本一样,但是这样就不需要额外的包装器了。
下载leiningen的最新版本并创建一个项目$ lein new foo,然后进入目录。在开发代码的过程中,您可能希望使用repl ($ lein repl),或者调用$ lein run从命令行运行它。
编辑src/foo/core.clj:为AOT编译添加一个gen类和一个主函数。
(ns foo.core
(:gen-class))(defn -main [& [a]]
(println (format "Hello, %s World!" a)))
编辑project.clj并使其成为主类:
(defproject foo "0.0.1"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.4.0"]]
:main foo.core)
现在编译uberjar并使其可执行:
$ lein do clean, compile, uberjar ; chmod +x ./target/foo-0.0.1-standalone.jar
可执行jar位于目标/目录中,您现在可以像任何其他可执行文件一样按名称调用该目录:
$ cd target
$ mv foo-0.0.1-standalone.jar foo
$ ./foo crazy
Hello, crazy World!
$ ./foo
Hello, null World!
其他方法
Leiningen w/ shebang
使用leiningen shebang风格的http://charsequence.blogspot.com/2012/04/scripting-clojure-with-leiningen-2.html
ClojureScript + V8 -> js w/ shebang
Clojure并不是命令行脚本的最佳选择,因为JVM需要热身时间。ClojureScript + V8 engine是在Rich首次宣布ClojureScript的时候提出的,这是一个更好的脚本编写解决方案。下面是包含详细示例http://mmcgrana.github.com/2011/09/clojurescript-nodejs.html的博客文章,这里有一个StackOverflow答案,展示了如何在shebang:?中使用节点
但是,由于您的目标似乎是没有编译步骤,所以您可能想要编写一个脚本,在运行它之前,在您的shebang中使用该脚本构建js。在这种情况下,您将再次遇到相同的JVM启动时间问题,因此您最好使用上面链接的Debasish更简单的方法。
发布于 2016-10-06 14:34:40
这个派对有点晚了:-)。
要回答有关Windows上的hashbang支持的直接问题:在Widow上预先构建的tcsh有一个可以设置的TCSHSUBSTHB环境变量。从README.NT中可以描述为:
指定hashbang仿真的映射。应该是“;”-空分隔映射的分隔对。例如, setenv TCSHSUBSTHB "/usr/local/bin/perl c:/bin/perl.exe; 将用
#!c:/bin/perl.exe代替顶部有#!/usr/local/bin/perl的脚本。 最后的“;”必须包括在内。
例如,在我的.tcshc中
setenv TCSHSUBSTHB "/usr/bin/tclsh j:/Tcl/bin/tclsh84.exe;
如果您可以将#!/usr/bin/java放在这个脚本的顶部,那么您可以使用TCSHSUBSTHB映射到您的java.exe。
另一种解决这个问题的方法是使用Cygwin的tcsh,它更像Unix,支持hashbang。
https://stackoverflow.com/questions/12786626
复制相似问题