1

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 mod を追加しようとしています:

# chmod +x test
# ls-F -l test
-rwxr-xr-x    1 SW       Administ       59 Oct  9 01:25 test*
# ./test

まだ同じ :(

質問は:

  • Windows 上の tcsh のビルド前のバージョンは hashbang をサポートしていますか?
  • もしそうなら、ハッシュバンでファイルを実行させる方法は?

多くのThx :-)

4

2 に答える 2

0

代わりに、プログラムを uberjar としてコンパイルすることをお勧めしますか? jar は、ラッパー スクリプトと同じように名前で実行できますが、この方法では追加のラッパーは必要ありません。

leiningen の最新バージョンをダウンロードしてプロジェクトを作成$ lein new fooし、ディレクトリに移動します。コードを開発中の場合は、おそらく repl() を使用するか、コマンド ラインから実行するために$ lein repl呼び出します。$ lein run

src/foo/core.clj を編集: AOT コンパイル用の gen-class と main 関数を追加します。


(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 は target/ ディレクトリにあり、他の実行可能ファイルと同様に名前で呼び出すことができます。


$ cd target
$ mv foo-0.0.1-standalone.jar foo
$ ./foo crazy
Hello, crazy World!
$ ./foo
Hello, null World!

その他のアプローチ

シバンとライニンゲン

leiningen シバン スタイルを使用http://charsequence.blogspot.com/2012/04/scripting-clojure-with-leiningen-2.html

ClojureScript + V8 -> js with shebang

Clojure は、JVM のウォームアップに時間がかかるため、コマンドライン スクリプト作成に最適な選択肢ではありません。ClojureScript + V8 エンジンは、(Rich Hickey による ClojureScript の最初の発表で) スクリプト作成のためのより優れたソリューションとして提唱されました。詳細な例を含むブログ記事は次のとおりですhttp://mmcgrana.github.com/2011/09/clojurescript-nodejs.htmlそして、シバンでノードを使用する方法を示すStackOverflowの回答があります: Is it possible to run Node.js 「ノード」を呼び出さずにスクリプトを実行しますか?

ただし、コンパイル手順がないように見えるため、実行する前にcljsからjsを構築するシバンで使用するスクリプトを作成することをお勧めします。この場合、同じ JVM 起動時間の問題が再び発生するため、上記のリンクにある Debasish のより単純なアプローチを使用する方がよい場合があります。

于 2012-10-09T04:37:55.100 に答える