ClojureはJava上で動いているため、起動がけっこう遅いです。
普段はreplを起動しっぱなしすることが多いかと思います。
ただ、ワンライナーのやり方を覚えているとシェルスクリプトから呼んだりできるので便利です。
文字列を直接Clojureのコードとして評価するには以下のようにします。
$ java -cp clojure.jar clojure.main -e "(str 'abc 'def)"
"abcdef"
leiningenを使用する場合は以下です。
$ lein run -m clojure.main -e "(str 'abc 'def)"
"abcdef"
コマンドライン引数は*command-line-args*
にstringのシーケンスとして入ってきます。
$ lein run -m clojure.main -e \
"(doseq [arg *command-line-args*] (println arg))" \
- abc def ghi
abc
def
ghi
しかし、この場合は強制終了しないと終了してくれません。
(おそらく標準入力から読み込むモードだからだと思われます)
本来の使い方は以下のような形だと思われます。
$ lein run -m clojure.main -e \
'(doseq [line (line-seq (java.io.BufferedReader. *in*))] \
(println (clojure.string/replace line #"cat" "dog")))' \
- <<EOT
This is cat.
Hello cat!!
EOT
This is dog.
Hello dog!!
標準入力から順次1行を読みこんで正規表現の置換を行っています。
ヒアドキュメントの部分をファイルからのリダイレクトに変えたり、パイプでつないだり、いろいろできそうですね。