首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows上的tcsh : hashbang文件支持

Windows上的tcsh : hashbang文件支持
EN

Stack Overflow用户
提问于 2012-10-08 17:31:54
回答 2查看 666关注 0票数 1

我在Windows上使用tcsh的预构建二进制exe。

我在试着写一些clojure脚本。就像这样:

代码语言:javascript
复制
#!/usr/bin/env java clojure.main

(prn "Hello World!\n")

首先,我尝试在tcsh中直接运行它:

代码语言:javascript
复制
# cat test
#!/usr/bin/env java clojure.main

(prn "Hello World\n")
# ./test
#

没有幸运:一个“选择正确的程序打开这个文件”窗口出现,但没有执行它。

我想在上面加上+x模式:

代码语言:javascript
复制
# chmod +x test
# ls-F -l test
-rwxr-xr-x    1 SW       Administ       59 Oct  9 01:25 test*
# ./test

仍然一样:(

问题是:

  • Windows上的tcsh预构建版本是否支持hashbang?
  • 如果是这样的话,如何让它使用hashbang执行文件?

很多Thx :-)

EN

回答 2

Stack Overflow用户

发布于 2012-10-09 04:37:55

我可以建议将您的程序编译为uberjar吗?jar可以按名称执行,就像执行包装器脚本一样,但是这样就不需要额外的包装器了。

下载leiningen的最新版本并创建一个项目$ lein new foo,然后进入目录。在开发代码的过程中,您可能希望使用repl ($ lein repl),或者调用$ lein run从命令行运行它。

编辑src/foo/core.clj:为AOT编译添加一个gen类和一个主函数。

代码语言:javascript
复制
(ns foo.core
  (:gen-class))
代码语言:javascript
复制
(defn -main [& [a]]
  (println (format "Hello, %s World!" a)))

编辑project.clj并使其成为主类:

代码语言:javascript
复制
(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位于目标/目录中,您现在可以像任何其他可执行文件一样按名称调用该目录:

代码语言:javascript
复制
$ 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更简单的方法。

票数 0
EN

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12786626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档